stm32f1/usb_cables.c

5651 lines
296 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-2020
*/
/* standard libraries */
#include <stdint.h> // standard integer types
#include <string.h> // string utilities
#include <stdlib.h> // memory 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 = "TX+1",
.port = GPIOG,
.pin = GPIO3,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX-1",
.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, // can be used to power eMarker
},
{
.name = "D+1",
.port = GPIOC,
.pin = GPIO8,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D-1",
.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 = "RX-2",
.port = GPIOA,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+2",
.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 = "TX+2",
.port = GPIOD,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX-2",
.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, // can be used to power eMarker
},
{
.name = "D+2",
.port = GPIOD,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D-2",
.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 = "RX-1",
.port = GPIOG,
.pin = GPIO10,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+1",
.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 = "TX+1",
.port = GPIOF,
.pin = GPIO12,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX-1",
.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, // can be used to power eMarker
},
{
.name = "D+1",
.port = GPIOB,
.pin = GPIO0,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D-1",
.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 = "RX-2",
.port = GPIOA,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+2",
.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 = "TX+2",
.port = GPIOE,
.pin = GPIO15,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX-2",
.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, // can be used to power eMarker
},
{
.name = "D+2",
.port = GPIOG,
.pin = GPIO1,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D-2",
.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 = "RX-1",
.port = GPIOE,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+1",
.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",
.shortname = "A",
.variant = "host",
.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",
.shortname = "C",
.variant = "host",
.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",
.shortname = "A",
.variant = "device",
.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",
.shortname = "B",
.variant = NULL,
.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",
.shortname = "mB",
.variant = NULL,
.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",
.shortname = "uB",
.variant = NULL,
.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",
.shortname = "C",
.variant = "device",
.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",
.shortname = "L",
.variant = NULL,
.pins_nb = LENGTH(lighnting_device_pins),
.pins = lighnting_device_pins,
};
const struct usb_connector_t* usb_connectors[] = {
[USB_CONNECTOR_A_HOST] = &usb_a_host_connector,
[USB_CONNECTOR_C_HOST] = &usb_c_host_connector,
[USB_CONNECTOR_A_DEVICE] = &usb_a_device_connector,
[USB_CONNECTOR_B_DEVICE] = &usb_b_device_connector,
[USB_CONNECTOR_MINIB_DEVICE] = &usb_minib_device_connector,
[USB_CONNECTOR_MICROB_DEVICE] = &usb_microb_device_connector,
[USB_CONNECTOR_C_DEVICE] = &usb_c_device_connector,
[USB_CONNECTOR_LIGHTNING_DEVICE] = &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 mandatory 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 mandatory 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 mandatory 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 mandatory 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 battery charger cable mandatory pin pairs
* @implements Battery Charging Specification, Revision 1.1: A Dedicated Charging Port is required to short the D+ line to the D- line. Doing it in the cable on the device side is kind of cheating
* @note this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__b__abbc_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_b_device_pins[2], usb_b_device_pins[3]}, // D+, D-
};
/** USB type A to type B USB 2.0 cable mandatory 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 mandatory 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__abbc_pins[][2] = {
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
{usb_b_device_pins[2], usb_b_device_pins[3]}, // D+, D-
};
static const uint8_t usb__a_device__b__ab0_opts[][2] = {
{usb_b_device_pins[2], usb_b_device_pins[3]}, // D+, D- (Battery Charging Specification, Revision 1.1: A Dedicated Charging Port is required to short the D+ line to the D- line. Doing it in the cable on the device side is kind of cheating)
};
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 mandatory 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 mandatory 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 battery charger cable mandatory pin pairs
* @implements Battery Charging Specification, Revision 1.1: A Dedicated Charging Port is required to short the D+ line to the D- line. Doing it in the cable on the device side is kind of cheating
* @note this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__minib__ambbc_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_minib_device_pins[2], usb_minib_device_pins[3]}, // D+, D-
};
/** USB type A to type mini-B USB 2.0 cable mandatory 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__ambbc_pins[][2] = {
{usb_a_device_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_minib_device_pins[5]}, // GND
{usb_minib_device_pins[2], usb_minib_device_pins[3]}, // D+, D-
};
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 mandatory 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 mandatory 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 power only cable mandatory pin pairs
* @implements Battery Charging Specification, Revision 1.1: A Dedicated Charging Port is required to short the D+ line to the D- line. Doing it in the cable on the device side is kind of cheating
* @note this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__microb__aubbc_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_microb_device_pins[2], usb_microb_device_pins[3]}, // D+, D-
};
/** USB type A to type micro-B USB 2.0 cable mandatory 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 mandatory 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__aubbc_pins[][2] = {
{usb_a_device_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_microb_device_pins[5]}, // GND
{usb_microb_device_pins[2], usb_microb_device_pins[3]}, // D+, D-
};
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 pins the type C connector so to test it */
static const uint8_t usb__c_host__c_host__cpinshunt_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 TX+1, B11 RX+1
{usb_c_host_sidea_pins[3], usb_c_host_sideb_pins[10]}, // A3 TX-1, B10 RX-1
{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 D+1, B7 D-2
{usb_c_host_sidea_pins[7], usb_c_host_sideb_pins[6]}, // A7 D-1, B6 D+2
{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 RX-2, B3 TX-2
{usb_c_host_sidea_pins[11], usb_c_host_sideb_pins[2]}, // A11 RX+2, B2 TX+2
{usb_c_host_sidea_pins[12], usb_c_host_sideb_pins[1]}, // A12 GND, B1 GND
};
/** 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__csignalshunt_pins[][2] = {
{usb_c_host_sidea_pins[1], usb_c_host_sideb_pins[1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[2], usb_c_host_sideb_pins[2]}, // A2 TX+1, B2 TX+2
{usb_c_host_sidea_pins[3], usb_c_host_sideb_pins[3]}, // A3 TX-1, B3 TX-2
{usb_c_host_sidea_pins[4], usb_c_host_sideb_pins[4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sideb_pins[5]}, // A5 CC1, B5 CC2
{usb_c_host_sidea_pins[6], usb_c_host_sideb_pins[6]}, // A6 D+1, B6 D+2
{usb_c_host_sidea_pins[7], usb_c_host_sideb_pins[7]}, // A7 D-1, B7 D-2
{usb_c_host_sidea_pins[8], usb_c_host_sideb_pins[8]}, // A8 SBU1, B8 SBU2
{usb_c_host_sidea_pins[9], usb_c_host_sideb_pins[9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[10], usb_c_host_sideb_pins[10]}, // A10 RX-2, B10 RX-1
{usb_c_host_sidea_pins[11], usb_c_host_sideb_pins[11]}, // A11 RX+2, B11 RX+1
{usb_c_host_sidea_pins[12], usb_c_host_sideb_pins[12]}, // A12 GND, B12 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__cpinshunt_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 TX+1, B11 RX+1
{usb_c_device_sidea_pins[3], usb_c_device_sideb_pins[10]}, // A3 TX-1, B10 RX-1
{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 D+1, B7 D-2
{usb_c_device_sidea_pins[7], usb_c_device_sideb_pins[6]}, // A7 D-1, B6 D+2
{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 RX-2, B3 TX-2
{usb_c_device_sidea_pins[11], usb_c_device_sideb_pins[2]}, // A11 RX+2, B2 TX+2
{usb_c_device_sidea_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, B1 GND
};
static const uint8_t usb__c_device__c_device__csignalshunt_pins[][2] = {
{usb_c_device_sidea_pins[1], usb_c_device_sideb_pins[1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[2], usb_c_device_sideb_pins[2]}, // A2 TX+1, B2 TX+2
{usb_c_device_sidea_pins[3], usb_c_device_sideb_pins[3]}, // A3 TX-1, B3 TX-2
{usb_c_device_sidea_pins[4], usb_c_device_sideb_pins[4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sideb_pins[5]}, // A5 CC1, B5 CC2
{usb_c_device_sidea_pins[6], usb_c_device_sideb_pins[6]}, // A6 D+1, B6 D+2
{usb_c_device_sidea_pins[7], usb_c_device_sideb_pins[7]}, // A7 D-1, B7 D-2
{usb_c_device_sidea_pins[8], usb_c_device_sideb_pins[8]}, // A8 SBU1, B8 SBU2
{usb_c_device_sidea_pins[9], usb_c_device_sideb_pins[9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[10], usb_c_device_sideb_pins[10]}, // A10 RX-2, B10 RX-1
{usb_c_device_sidea_pins[11], usb_c_device_sideb_pins[11]}, // A11 RX+2, B11 RX+1
{usb_c_device_sidea_pins[12], usb_c_device_sideb_pins[12]}, // A12 GND, B12 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 mandatory 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 mandatory 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 D-1
{usb_a_host_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_host_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_host_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_host_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{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 D-1
{usb_a_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{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 mandatory 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 (56kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 D-1
{usb_a_host_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_a_host_pins[6], usb_c_host_sidea_pins[2]}, // RX+, A2 TX+1
{usb_a_host_pins[5], usb_c_host_sidea_pins[3]}, // RX-, A3 TX-1
{usb_a_host_pins[9], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_host_pins[8], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 D-1
{usb_a_host_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_a_host_pins[6], usb_c_host_sideb_pins[2]}, // RX+, A2 TX+1
{usb_a_host_pins[5], usb_c_host_sideb_pins[3]}, // RX-, A3 TX-1
{usb_a_host_pins[9], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_host_pins[8], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 D-1
{usb_a_host_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_a_host_pins[6], usb_c_device_sidea_pins[2]}, // RX+, A2 TX+1
{usb_a_host_pins[5], usb_c_device_sidea_pins[3]}, // RX-, A3 TX-1
{usb_a_host_pins[9], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_host_pins[8], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 D-1
{usb_a_host_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_a_host_pins[6], usb_c_device_sideb_pins[2]}, // RX+, A2 TX+1
{usb_a_host_pins[5], usb_c_device_sideb_pins[3]}, // RX-, A3 TX-1
{usb_a_host_pins[9], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_host_pins[8], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 D-1
{usb_a_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_a_device_pins[6], usb_c_host_sidea_pins[2]}, // RX+, A2 TX+1
{usb_a_device_pins[5], usb_c_host_sidea_pins[3]}, // RX-, A3 TX-1
{usb_a_device_pins[9], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_device_pins[8], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 D-1
{usb_a_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_a_device_pins[6], usb_c_host_sideb_pins[2]}, // RX+, A2 TX+1
{usb_a_device_pins[5], usb_c_host_sideb_pins[3]}, // RX-, A3 TX-1
{usb_a_device_pins[9], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_device_pins[8], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 D-1
{usb_a_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_a_device_pins[6], usb_c_device_sidea_pins[2]}, // RX+, A2 TX+1
{usb_a_device_pins[5], usb_c_device_sidea_pins[3]}, // RX-, A3 TX-1
{usb_a_device_pins[9], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_device_pins[8], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 (56kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 D-1
{usb_a_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_a_device_pins[6], usb_c_device_sideb_pins[2]}, // RX+, A2 TX+1
{usb_a_device_pins[5], usb_c_device_sideb_pins[3]}, // RX-, A3 TX-1
{usb_a_device_pins[9], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_a_device_pins[8], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
/** 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 mandatory 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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_b_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[4], usb_c_host_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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
// C internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_b_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[4], usb_c_host_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_b_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[4], usb_c_device_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_b_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[4], usb_c_device_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
/** USB type C to type B USB 3.1 cable mandatory 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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[0]}, // A5 CC1, shield
// 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[4], usb_c_host_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_b_device_pins[7], usb_c_host_sidea_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_b_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 D-1
{usb_b_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[9], usb_c_host_sidea_pins[2]}, // RX+, A2 TX+1
{usb_b_device_pins[8], usb_c_host_sidea_pins[3]}, // RX-, A3 TX-1
{usb_b_device_pins[6], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_b_device_pins[5], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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
// C internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[0]}, // A5 CC1, shield
// 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[4], usb_c_host_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_b_device_pins[7], usb_c_host_sideb_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_b_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 D-1
{usb_b_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[9], usb_c_host_sideb_pins[2]}, // RX+, A2 TX+1
{usb_b_device_pins[8], usb_c_host_sideb_pins[3]}, // RX-, A3 TX-1
{usb_b_device_pins[6], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_b_device_pins[5], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[0]}, // A5 CC1, shield
// 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[4], usb_c_device_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_b_device_pins[7], usb_c_device_sidea_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_b_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 D-1
{usb_b_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[9], usb_c_device_sidea_pins[2]}, // RX+, A2 TX+1
{usb_b_device_pins[8], usb_c_device_sidea_pins[3]}, // RX-, A3 TX-1
{usb_b_device_pins[6], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_b_device_pins[5], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[0]}, // A5 CC1, shield
// 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[4], usb_c_device_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_b_device_pins[7], usb_c_device_sideb_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_b_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 D-1
{usb_b_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_b_device_pins[9], usb_c_device_sideb_pins[2]}, // RX+, A2 TX+1
{usb_b_device_pins[8], usb_c_device_sideb_pins[3]}, // RX-, A3 TX-1
{usb_b_device_pins[6], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_b_device_pins[5], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
/** 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 mandatory 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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_minib_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_minib_device_pins[5], usb_c_host_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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
// C internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_minib_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_minib_device_pins[5], usb_c_host_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_minib_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_minib_device_pins[5], usb_c_device_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_minib_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_minib_device_pins[5], usb_c_device_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
/** 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 mandatory 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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_microb_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[5], usb_c_host_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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
// C internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_microb_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[5], usb_c_host_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_microb_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[5], usb_c_device_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[0]}, // A5 CC1, shield
// 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 D-1
{usb_microb_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[5], usb_c_device_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
};
/** USB type C to type micro-B USB 3.1 Gen 2 cable mandatory 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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[0]}, // A5 CC1, shield
// 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[5], usb_c_host_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_microb_device_pins[8], usb_c_host_sidea_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 D-1
{usb_microb_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[9], usb_c_host_sidea_pins[2]}, // RX+, A2 TX+1
{usb_microb_device_pins[10], usb_c_host_sidea_pins[3]}, // RX-, A3 TX-1
{usb_microb_device_pins[6], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_microb_device_pins[7], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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
// C internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[0]}, // A5 CC1, shield
// 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[5], usb_c_host_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_microb_device_pins[8], usb_c_host_sideb_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 D-1
{usb_microb_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[9], usb_c_host_sideb_pins[2]}, // RX+, A2 TX+1
{usb_microb_device_pins[10], usb_c_host_sideb_pins[3]}, // RX-, A3 TX-1
{usb_microb_device_pins[6], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_microb_device_pins[7], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[0]}, // A5 CC1, shield
// 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[5], usb_c_device_sidea_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_microb_device_pins[8], usb_c_device_sidea_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 D-1
{usb_microb_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[9], usb_c_device_sidea_pins[2]}, // RX+, A2 TX+1
{usb_microb_device_pins[10], usb_c_device_sidea_pins[3]}, // RX-, A3 TX-1
{usb_microb_device_pins[6], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RX+1
{usb_microb_device_pins[7], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RX-1
};
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 - shield to ground
{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
// C internal connections - ground
{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
// C internal connections - power
{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 internal connections - device indicator (Rd 5.1 kO pull down)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[1]}, // A5 CC1, A1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12]}, // A5 CC1, A12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 1]}, // A5 CC1, B1 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[12 + 12]}, // A5 CC1, B12 GND
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[0]}, // A5 CC1, shield
// 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[5], usb_c_device_sideb_pins[5]}, // GND, A5 CC1 (Rd 5.1 kO pull down)
{usb_microb_device_pins[8], usb_c_device_sideb_pins[5]}, // GND_DRAIN, A5 CC1 (Rd 5.1 kO pull down)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 D-1
{usb_microb_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 D+1
{usb_microb_device_pins[9], usb_c_device_sideb_pins[2]}, // RX+, A2 TX+1
{usb_microb_device_pins[10], usb_c_device_sideb_pins[3]}, // RX-, A3 TX-1
{usb_microb_device_pins[6], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RX+1
{usb_microb_device_pins[7], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RX-1
};
/** 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 mandatory 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[0]}, // shield, shield
{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[0]}, // A1 GND, shield
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[1]}, // A1 GND, A1 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[0]}, // A12 GND, shield
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12]}, // A12 GND, A12 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[0]}, // B1 GND, shield
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 1]}, // B1 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[12 + 12], usb_c_device_sidea_pins[0]}, // B12 GND, shield
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[4]}, // A4 VBUS, A4 VBUS
{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[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[9]}, // A9 VBUS, A9 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 + 4], usb_c_device_sidea_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 9]}, // B9 VBUS, B9 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 D+1, A6 D+1
{usb_c_host_sidea_pins[7], usb_c_device_sidea_pins[7]}, // A7 D-1, A7 D-1
};
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[0]}, // shield, shield
{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[0]}, // A1 GND, shield
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[1]}, // A1 GND, A1 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[0]}, // A12 GND, shield
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12]}, // A12 GND, A12 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[0]}, // B1 GND, shield
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12 + 1]}, // B1 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[12 + 12], usb_c_device_sideb_pins[0]}, // B12 GND, shield
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[4]}, // A4 VBUS, A4 VBUS
{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[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[9]}, // A9 VBUS, A9 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 + 4], usb_c_device_sideb_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 9]}, // B9 VBUS, B9 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 D+1, A6 D+1
{usb_c_host_sidea_pins[7], usb_c_device_sideb_pins[7]}, // A7 D-1, A7 D-1
};
static const uint8_t usb__c_host_sideb__c_device_sidea__cc2_pins[][2] = {
// C host side 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
// 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_sideb_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[0]}, // A1 GND, shield
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[1]}, // A1 GND, A1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[0]}, // A12 GND, shield
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12]}, // A12 GND, A12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[0]}, // B1 GND, shield
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12 + 1]}, // B1 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[0]}, // B12 GND, shield
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[4]}, // A4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[9]}, // A9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[12 + 9]}, // B9 VBUS, B9 VBUS
// C-C data connections
{usb_c_host_sideb_pins[5], usb_c_device_sidea_pins[5]}, // A5 CC1, A5 CC1 (CC)
//{usb_c_host_sideb_pins[12 + 5], usb_c_device_sidea_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sideb_pins[6], usb_c_device_sidea_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sideb_pins[7], usb_c_device_sidea_pins[7]}, // A7 D-1, A7 D-1
};
static const uint8_t usb__c_host_sideb__c_device_sideb__cc2_pins[][2] = {
// C host side 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
// 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_sideb_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[0]}, // A1 GND, shield
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[1]}, // A1 GND, A1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[0]}, // A12 GND, shield
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12]}, // A12 GND, A12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[0]}, // B1 GND, shield
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 1]}, // B1 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[0]}, // B12 GND, shield
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[4]}, // A4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[9]}, // A9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 9]}, // B9 VBUS, B9 VBUS
// C-C data connections
{usb_c_host_sideb_pins[5], usb_c_device_sideb_pins[5]}, // A5 CC1, A5 CC1 (CC)
//{usb_c_host_sideb_pins[12 + 5], usb_c_device_sideb_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sideb_pins[6], usb_c_device_sideb_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sideb_pins[7], usb_c_device_sideb_pins[7]}, // A7 D-1, A7 D-1
};
/** USB type C to type C full featured cable mandatory 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[0]}, // shield, shield
{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[0]}, // A1 GND, shield
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[1]}, // A1 GND, A1 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[0]}, // A12 GND, shield
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12]}, // A12 GND, A12 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[0]}, // B1 GND, shield
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 1]}, // B1 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[12 + 12], usb_c_device_sidea_pins[0]}, // B12 GND, shield
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sidea_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[4]}, // A4 VBUS, A4 VBUS
{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[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[9]}, // A9 VBUS, A9 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 + 4], usb_c_device_sidea_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sidea_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 9]}, // B9 VBUS, B9 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) they are not directly connected, but through Ra connected to ground on both sides
{usb_c_host_sidea_pins[6], usb_c_device_sidea_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sidea_pins[7], usb_c_device_sidea_pins[7]}, // A7 D-1, A7 D-1
{usb_c_host_sidea_pins[2], usb_c_device_sidea_pins[12 + 11]}, // A2 TX+1, B11 RX+1
{usb_c_host_sidea_pins[3], usb_c_device_sidea_pins[12 + 10]}, // A3 TX-1, B10 RX-1
{usb_c_host_sidea_pins[12 + 11], usb_c_device_sidea_pins[2]}, // B11 RX+1, A2 TX+1
{usb_c_host_sidea_pins[12 + 10], usb_c_device_sidea_pins[3]}, // B10 RX-1, A3 TX-1
{usb_c_host_sidea_pins[12 + 2], usb_c_device_sidea_pins[11]}, // B2 TX+2, Q11 RX+2
{usb_c_host_sidea_pins[12 + 3], usb_c_device_sidea_pins[10]}, // B3 TX-2, A10 RX-2
{usb_c_host_sidea_pins[11], usb_c_device_sidea_pins[12 + 2]}, // A11 RX+2, B2 TX+2
{usb_c_host_sidea_pins[10], usb_c_device_sidea_pins[12 + 3]}, // A10 RX-2, B3 TX-2
{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[0]}, // shield, shield
{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[0]}, // A1 GND, shield
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[1]}, // A1 GND, A1 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[0]}, // A12 GND, shield
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12]}, // A12 GND, A12 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[0]}, // B1 GND, shield
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12 + 1]}, // B1 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[12 + 12], usb_c_device_sideb_pins[0]}, // B12 GND, shield
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 12], usb_c_device_sideb_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[4]}, // A4 VBUS, A4 VBUS
{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[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[9]}, // A9 VBUS, A9 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 + 4], usb_c_device_sideb_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 4], usb_c_device_sideb_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 9]}, // B9 VBUS, B9 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) they are not directly connected, but through Ra connected to ground on both sides
{usb_c_host_sidea_pins[6], usb_c_device_sideb_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sidea_pins[7], usb_c_device_sideb_pins[7]}, // A7 D-1, A7 D-1
{usb_c_host_sidea_pins[2], usb_c_device_sideb_pins[12 + 11]}, // A2 TX+1, B11 RX+1
{usb_c_host_sidea_pins[3], usb_c_device_sideb_pins[12 + 10]}, // A3 TX-1, B10 RX-1
{usb_c_host_sidea_pins[12 + 11], usb_c_device_sideb_pins[2]}, // B11 RX+1, A2 TX+1
{usb_c_host_sidea_pins[12 + 10], usb_c_device_sideb_pins[3]}, // B10 RX-1, A3 TX-1
{usb_c_host_sidea_pins[12 + 2], usb_c_device_sideb_pins[11]}, // B2 TX+2, Q11 RX+2
{usb_c_host_sidea_pins[12 + 3], usb_c_device_sideb_pins[10]}, // B3 TX-2, A10 RX-2
{usb_c_host_sidea_pins[11], usb_c_device_sideb_pins[12 + 2]}, // A11 RX+2, B2 TX+2
{usb_c_host_sidea_pins[10], usb_c_device_sideb_pins[12 + 3]}, // A10 RX-2, B3 TX-2
{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
};
static const uint8_t usb__c_host_sideb__c_device_sidea__ff_pins[][2] = {
// C host side 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
// 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_sideb_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[0]}, // A1 GND, shield
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[1]}, // A1 GND, A1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[0]}, // A12 GND, shield
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12]}, // A12 GND, A12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[0]}, // B1 GND, shield
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12 + 1]}, // B1 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[0]}, // B12 GND, shield
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sidea_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[4]}, // A4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[9]}, // A9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sidea_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sidea_pins[12 + 9]}, // B9 VBUS, B9 VBUS
// C-C data connections
{usb_c_host_sideb_pins[5], usb_c_device_sidea_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sideb_pins[12 + 5], usb_c_device_sidea_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN) they are not directly connected, but through Ra connected to ground on both sides
{usb_c_host_sideb_pins[6], usb_c_device_sidea_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sideb_pins[7], usb_c_device_sidea_pins[7]}, // A7 D-1, A7 D-1
{usb_c_host_sideb_pins[2], usb_c_device_sidea_pins[12 + 11]}, // A2 TX+1, B11 RX+1
{usb_c_host_sideb_pins[3], usb_c_device_sidea_pins[12 + 10]}, // A3 TX-1, B10 RX-1
{usb_c_host_sideb_pins[12 + 11], usb_c_device_sidea_pins[2]}, // B11 RX+1, A2 TX+1
{usb_c_host_sideb_pins[12 + 10], usb_c_device_sidea_pins[3]}, // B10 RX-1, A3 TX-1
{usb_c_host_sideb_pins[12 + 2], usb_c_device_sidea_pins[11]}, // B2 TX+2, Q11 RX+2
{usb_c_host_sideb_pins[12 + 3], usb_c_device_sidea_pins[10]}, // B3 TX-2, A10 RX-2
{usb_c_host_sideb_pins[11], usb_c_device_sidea_pins[12 + 2]}, // A11 RX+2, B2 TX+2
{usb_c_host_sideb_pins[10], usb_c_device_sidea_pins[12 + 3]}, // A10 RX-2, B3 TX-2
{usb_c_host_sideb_pins[8], usb_c_device_sidea_pins[12 + 8]}, // A8 SBU1, B8 SBU2
{usb_c_host_sideb_pins[12 + 8], usb_c_device_sidea_pins[8]}, // B8 SBU2, A8 SBU1
};
static const uint8_t usb__c_host_sideb__c_device_sideb__ff_pins[][2] = {
// C host side 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
// 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_sideb_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[0]}, // A1 GND, shield
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[1]}, // A1 GND, A1 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[0]}, // A12 GND, shield
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, A1 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12]}, // A12 GND, A12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[0]}, // B1 GND, shield
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[1]}, // B1 GND, A1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12]}, // B1 GND, A12 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 1]}, // B1 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[0]}, // B12 GND, shield
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[1]}, // B12 GND, A1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12]}, // B12 GND, A12 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12 + 1]}, // B12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 12], usb_c_device_sideb_pins[12 + 12]}, // B12 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[4]}, // A4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[4]}, // A9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[9]}, // A9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[4]}, // B4 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[9]}, // B4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[12 + 4]}, // B4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 4], usb_c_device_sideb_pins[12 + 9]}, // B4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[4]}, // B9 VBUS, A4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[9]}, // B9 VBUS, A9 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 9]}, // B9 VBUS, B9 VBUS
// C-C data connections
{usb_c_host_sideb_pins[5], usb_c_device_sideb_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sideb_pins[12 + 5], usb_c_device_sideb_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN) they are not directly connected, but through Ra connected to ground on both sides
{usb_c_host_sideb_pins[6], usb_c_device_sideb_pins[6]}, // A6 D+1, A6 D+1
{usb_c_host_sideb_pins[7], usb_c_device_sideb_pins[7]}, // A7 D-1, A7 D-1
{usb_c_host_sideb_pins[2], usb_c_device_sideb_pins[12 + 11]}, // A2 TX+1, B11 RX+1
{usb_c_host_sideb_pins[3], usb_c_device_sideb_pins[12 + 10]}, // A3 TX-1, B10 RX-1
{usb_c_host_sideb_pins[12 + 11], usb_c_device_sideb_pins[2]}, // B11 RX+1, A2 TX+1
{usb_c_host_sideb_pins[12 + 10], usb_c_device_sideb_pins[3]}, // B10 RX-1, A3 TX-1
{usb_c_host_sideb_pins[12 + 2], usb_c_device_sideb_pins[11]}, // B2 TX+2, Q11 RX+2
{usb_c_host_sideb_pins[12 + 3], usb_c_device_sideb_pins[10]}, // B3 TX-2, A10 RX-2
{usb_c_host_sideb_pins[11], usb_c_device_sideb_pins[12 + 2]}, // A11 RX+2, B2 TX+2
{usb_c_host_sideb_pins[10], usb_c_device_sideb_pins[12 + 3]}, // A10 RX-2, B3 TX-2
{usb_c_host_sideb_pins[8], usb_c_device_sideb_pins[12 + 8]}, // A8 SBU1, B8 SBU2
{usb_c_host_sideb_pins[12 + 8], usb_c_device_sideb_pins[8]}, // B8 SBU2, A8 SBU1
};
const struct usb_cable_t usb_cables[] = {
// A-A
[USB_CABLE_AA0] = {
.name = "A-A power only",
.shortname = NULL,
.variant = NULL,
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.mandatory_pairs_nb = LENGTH(usb_aa0_pins),
.mandatory_pairs = usb_aa0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AA2] = {
.name = "A-A USB 2.0",
.shortname = NULL,
.variant = NULL,
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.mandatory_pairs_nb = LENGTH(usb_aa2_pins),
.mandatory_pairs = usb_aa2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AA3] = {
.name = "A-A USB 3.x",
.shortname = NULL,
.variant = NULL,
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.mandatory_pairs_nb = LENGTH(usb_aa3_pins),
.mandatory_pairs = usb_aa3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (host) - B
[USB_CABLE_AB0_HOST] = {
.name = "A-B power only",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__b__ab0_pins),
.mandatory_pairs = usb__a_host__b__ab0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_ABBC_HOST] = {
.name = "A-B battery charger (1.5A)",
.shortname = "A-B BC 1.5A",
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__b__abbc_pins),
.mandatory_pairs = usb__a_host__b__abbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AB2_HOST] = {
.name = "A-B USB 2.0",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__b__ab2_pins),
.mandatory_pairs = usb__a_host__b__ab2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AB3_HOST] = {
.name = "A-B USB 3.x",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__b__ab3_pins),
.mandatory_pairs = usb__a_host__b__ab3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (device) - B
[USB_CABLE_AB0_DEVICE] = {
.name = "A-B power only",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__b__ab0_pins),
.mandatory_pairs = usb__a_device__b__ab0_pins,
.optional_pairs_nb = LENGTH(usb__a_device__b__ab0_opts),
.optional_pairs = usb__a_device__b__ab0_opts,
},
[USB_CABLE_ABBC_DEVICE] = {
.name = "A-B battery charger (1.5A)",
.shortname = "A-B BC 1.5A",
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_b_connectors),
.connectors = usb_a_device_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__b__abbc_pins),
.mandatory_pairs = usb__a_device__b__abbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AB2_DEVICE] = {
.name = "A-B USB 2.0",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__b__ab2_pins),
.mandatory_pairs = usb__a_device__b__ab2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AB3_DEVICE] = {
.name = "A-B USB 3.x",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__b__ab3_pins),
.mandatory_pairs = usb__a_device__b__ab3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A + A - B
[USB_CABLE_AAB2_HOST] = {
.name = "A+A-B USB 2.0",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_a_b_connectors),
.connectors = usb_a_a_b_connectors,
.mandatory_pairs_nb = LENGTH(usb_a_host_a_device_b_aab2_pins),
.mandatory_pairs = usb_a_host_a_device_b_aab2_pins,
},
[USB_CABLE_AAB2_DEVICE] = {
.name = "A+A-B USB 2.0",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_a_b_connectors),
.connectors = usb_a_a_b_connectors,
.mandatory_pairs_nb = LENGTH(usb_a_device_a_host_b_aab2_pins),
.mandatory_pairs = usb_a_device_a_host_b_aab2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (host) - mini-B
[USB_CABLE_AMB0_HOST] = {
.name = "A-miniB power only",
.shortname = "A-miniB power",
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_minib_connectors),
.connectors = usb_a_host_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__minib__amb0_pins),
.mandatory_pairs = usb__a_host__minib__amb0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AMBBC_HOST] = {
.name = "A-miniB battery charger (1.5A)",
.shortname = "A-mB BC 1.5A",
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_minib_connectors),
.connectors = usb_a_host_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__minib__ambbc_pins),
.mandatory_pairs = usb__a_host__minib__ambbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AMB2_HOST] = {
.name = "A-miniB USB 2.0",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_minib_connectors),
.connectors = usb_a_host_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__minib__amb2_pins),
.mandatory_pairs = usb__a_host__minib__amb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (device) - mini-B
[USB_CABLE_AMB0_DEVICE] = {
.name = "A-miniB power only",
.shortname = "A-miniB power",
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_minib_connectors),
.connectors = usb_a_device_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__minib__amb0_pins),
.mandatory_pairs = usb__a_device__minib__amb0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AMBBC_DEVICE] = {
.name = "A-miniB battery charger (1.5A)",
.shortname = "A-mB BC 1.5A",
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_minib_connectors),
.connectors = usb_a_device_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__minib__ambbc_pins),
.mandatory_pairs = usb__a_device__minib__ambbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AMB2_DEVICE] = {
.name = "A-miniB USB 2.0",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_minib_connectors),
.connectors = usb_a_device_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__minib__amb2_pins),
.mandatory_pairs = usb__a_device__minib__amb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A + A - mini-B
[USB_CABLE_AAMB2_HOST] = {
.name = "A+A-miniB USB 2.0",
.shortname = "A+A-miniB 2.0",
.variant = "data on A host receptacle",
.connectors_nb = LENGTH(usb_a_a_minib_connectors),
.connectors = usb_a_a_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb_a_host_a_device_minib_aamb2_pins),
.mandatory_pairs = usb_a_host_a_device_minib_aamb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AAMB2_DEVICE] = {
.name = "A+A-miniB USB 2.0",
.shortname = "A+A-miniB 2.0",
.variant = "data on A device receptacle",
.connectors_nb = LENGTH(usb_a_a_minib_connectors),
.connectors = usb_a_a_minib_connectors,
.mandatory_pairs_nb = LENGTH(usb_a_device_a_host_minib_aamb2_pins),
.mandatory_pairs = usb_a_device_a_host_minib_aamb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (host) - micro-B
[USB_CABLE_AUB0_HOST] = {
.name = "A-microB power only",
.shortname = "A-microB power",
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__microb__aub0_pins),
.mandatory_pairs = usb__a_host__microb__aub0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUBBC_HOST] = {
.name = "A-microB battery charger (1.5A)",
.shortname = "A-uB BC 1.5A",
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__microb__aubbc_pins),
.mandatory_pairs = usb__a_host__microb__aubbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUB2_HOST] = {
.name = "A-microB USB 2.0",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__microb__aub2_pins),
.mandatory_pairs = usb__a_host__microb__aub2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUB3_HOST] = {
.name = "A-microB USB 3.x",
.shortname = NULL,
.variant = "A host receptacle",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__microb__aub3_pins),
.mandatory_pairs = usb__a_host__microb__aub3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A (device) - micro-B
[USB_CABLE_AUB0_DEVICE] = {
.name = "A-microB power only",
.shortname = "A-microB power",
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__microb__aub0_pins),
.mandatory_pairs = usb__a_device__microb__aub0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUBBC_DEVICE] = {
.name = "A-microB battery charger",
.shortname = "A-uB batt chrg",
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__microb__aubbc_pins),
.mandatory_pairs = usb__a_device__microb__aubbc_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUB2_DEVICE] = {
.name = "A-microB USB 2.0",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__microb__aub2_pins),
.mandatory_pairs = usb__a_device__microb__aub2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AUB3_DEVICE] = {
.name = "A-microB USB 3.x",
.shortname = NULL,
.variant = "A device receptacle",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__microb__aub3_pins),
.mandatory_pairs = usb__a_device__microb__aub3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C
[USB_CABLE_CPINSHUNT_HOST] = {
.name = "C pins shunt",
.shortname = NULL,
.variant = "C host receptacle",
.connectors_nb = LENGTH(usb_c_host_connectors),
.connectors = usb_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host__c_host__cpinshunt_pins),
.mandatory_pairs = usb__c_host__c_host__cpinshunt_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CPINSHUNT_DEVICE] = {
.name = "C pins shunt",
.shortname = NULL,
.variant = "C device receptacle",
.connectors_nb = LENGTH(usb_c_device_connectors),
.connectors = usb_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device__c_device__cpinshunt_pins),
.mandatory_pairs = usb__c_device__c_device__cpinshunt_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CSIGNALSHUNT_HOST] = {
.name = "C signal shunt",
.shortname = NULL,
.variant = "C host receptacle",
.connectors_nb = LENGTH(usb_c_host_connectors),
.connectors = usb_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host__c_host__csignalshunt_pins),
.mandatory_pairs = usb__c_host__c_host__csignalshunt_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CSIGNALSHUNT_DEVICE] = {
.name = "C signal shunt",
.shortname = NULL,
.variant = "C device receptacle",
.connectors_nb = LENGTH(usb_c_device_connectors),
.connectors = usb_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device__c_device__csignalshunt_pins),
.mandatory_pairs = usb__c_device__c_device__csignalshunt_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A - C power only
[USB_CABLE_AC0_A_HOST_CA_HOST] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A host receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac0_pins),
.mandatory_pairs = usb__a_host__c_host_sidea__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_HOST_CB_HOST] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A host receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac0_pins),
.mandatory_pairs = usb__a_host__c_host_sideb__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_HOST_CA_DEVICE] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A host receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac0_pins),
.mandatory_pairs = usb__a_host__c_device_sidea__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_HOST_CB_DEVICE] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A host receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac0_pins),
.mandatory_pairs = usb__a_host__c_device_sideb__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_DEVICE_CA_HOST] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A device receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac0_pins),
.mandatory_pairs = usb__a_device__c_host_sidea__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_DEVICE_CB_HOST] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A device receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac0_pins),
.mandatory_pairs = usb__a_device__c_host_sideb__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_DEVICE_CA_DEVICE] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A device receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac0_pins),
.mandatory_pairs = usb__a_device__c_device_sidea__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC0_A_DEVICE_CB_DEVICE] = {
.name = "A-C power only",
.shortname = NULL,
.variant = "A device receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sideb__ac0_pins),
.mandatory_pairs = usb__a_device__c_device_sideb__ac0_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A - C USB 2.0
[USB_CABLE_AC2_A_HOST_CA_HOST] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A host receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac2_pins),
.mandatory_pairs = usb__a_host__c_host_sidea__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_HOST_CB_HOST] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A host receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac2_pins),
.mandatory_pairs = usb__a_host__c_host_sideb__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_HOST_CA_DEVICE] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A host receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac2_pins),
.mandatory_pairs = usb__a_host__c_device_sidea__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_HOST_CB_DEVICE] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A host receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac2_pins),
.mandatory_pairs = usb__a_host__c_device_sideb__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_DEVICE_CA_HOST] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A device receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac2_pins),
.mandatory_pairs = usb__a_device__c_host_sidea__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_DEVICE_CB_HOST] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A device receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac2_pins),
.mandatory_pairs = usb__a_device__c_host_sideb__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_DEVICE_CA_DEVICE] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A device receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac2_pins),
.mandatory_pairs = usb__a_device__c_device_sidea__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC2_A_DEVICE_CB_DEVICE] = {
.name = "A-C USB 2.0",
.shortname = NULL,
.variant = "A device receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sideb__ac2_pins),
.mandatory_pairs = usb__a_device__c_device_sideb__ac2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// A-C USB 3.1 Gen 2
[USB_CABLE_AC3_A_HOST_CA_HOST] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A host receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac3_pins),
.mandatory_pairs = usb__a_host__c_host_sidea__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_HOST_CB_HOST] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A host receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac3_pins),
.mandatory_pairs = usb__a_host__c_host_sideb__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_HOST_CA_DEVICE] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A host receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac3_pins),
.mandatory_pairs = usb__a_host__c_device_sidea__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_HOST_CB_DEVICE] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A host receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac3_pins),
.mandatory_pairs = usb__a_host__c_device_sideb__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_DEVICE_CA_HOST] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A device receptacle, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac3_pins),
.mandatory_pairs = usb__a_device__c_host_sidea__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_DEVICE_CB_HOST] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A device receptacle, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac3_pins),
.mandatory_pairs = usb__a_device__c_host_sideb__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_DEVICE_CA_DEVICE] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A device receptacle, C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac3_pins),
.mandatory_pairs = usb__a_device__c_device_sidea__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_AC3_A_DEVICE_CB_DEVICE] = {
.name = "A-C USB 3.1 Gen 2",
.shortname = "A-C 3.1 Gen 2",
.variant = "A device receptacle, C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac3_pins),
.mandatory_pairs = usb__a_device__c_device_sideb__ac3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C - B USB 2.0
[USB_CABLE_CB2_CA_HOST] = {
.name = "C-B USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__b_device__cb2_pins),
.mandatory_pairs = usb__c_host_sidea__b_device__cb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB2_CB_HOST] = {
.name = "C-B USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__b_device__cb2_pins),
.mandatory_pairs = usb__c_host_sideb__b_device__cb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB2_CA_DEVICE] = {
.name = "C-B USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sidea__b_device__cb2_pins),
.mandatory_pairs = usb__c_device_sidea__b_device__cb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB2_CB_DEVICE ] = {
.name = "C-B USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sideb__b_device__cb2_pins),
.mandatory_pairs = usb__c_device_sideb__b_device__cb2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C - B USB 3.1 Gen 2
[USB_CABLE_CB3_CA_HOST] = {
.name = "C-B USB 3.1 Gen 2",
.shortname = "C-B 3.1 Gen 2",
.variant = "C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__b_device__cb3_pins),
.mandatory_pairs = usb__c_host_sidea__b_device__cb3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB3_CB_HOST] = {
.name = "C-B USB 3.1 Gen 2",
.shortname = "C-B 3.1 Gen 2",
.variant = "C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__b_device__cb3_pins),
.mandatory_pairs = usb__c_host_sideb__b_device__cb3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB3_CA_DEVICE] = {
.name = "C-B USB 3.1 Gen 2",
.shortname = "C-B 3.1 Gen 2",
.variant = "C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sidea__b_device__cb3_pins),
.mandatory_pairs = usb__c_device_sidea__b_device__cb3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CB3_CB_DEVICE] = {
.name = "C-B USB 3.1 Gen 2",
.shortname = "C-B 3.1 Gen 2",
.variant = "C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sideb__b_device__cb3_pins),
.mandatory_pairs = usb__c_device_sideb__b_device__cb3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C - mini-B USB 2.0
[USB_CABLE_CMB2_CA_HOST] = {
.name = "C-miniB USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_host_minib_device_connectors),
.connectors = usb_c_host_minib_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__minib_device__cminib2_pins),
.mandatory_pairs = usb__c_host_sidea__minib_device__cminib2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CMB2_CB_HOST] = {
.name = "C-miniB USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_host_minib_device_connectors),
.connectors = usb_c_host_minib_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__minib_device__cminib2_pins),
.mandatory_pairs = usb__c_host_sideb__minib_device__cminib2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CMB2_CA_DEVICE] = {
.name = "C-miniB USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_device_minib_device_connectors),
.connectors = usb_c_device_minib_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sidea__minib_device__cminib2_pins),
.mandatory_pairs = usb__c_device_sidea__minib_device__cminib2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CMB2_CB_DEVICE] = {
.name = "C-miniB USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_device_minib_device_connectors),
.connectors = usb_c_device_minib_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sideb__minib_device__cminib2_pins),
.mandatory_pairs = usb__c_device_sideb__minib_device__cminib2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C - micro-B USB 2.0
[USB_CABLE_CUB2_CA_HOST] = {
.name = "C-microB USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__microb_device__cmicrob2_pins),
.mandatory_pairs = usb__c_host_sidea__microb_device__cmicrob2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB2_CB_HOST] = {
.name = "C-microB USB 2.0",
.shortname = NULL,
.variant = "C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__microb_device__cmicrob2_pins),
.mandatory_pairs = usb__c_host_sideb__microb_device__cmicrob2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB2_CA_DEVICE] = {
.name = "C-microB USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sidea__microb_device__cmicrob2_pins),
.mandatory_pairs = usb__c_device_sidea__microb_device__cmicrob2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB2_CB_DEVICE] = {
.name = "C-microB USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sideb__microb_device__cmicrob2_pins),
.mandatory_pairs = usb__c_device_sideb__microb_device__cmicrob2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C - micro-B USB 3.1 Gen 2
[USB_CABLE_CUB3_CA_HOST] = {
.name = "C-microB USB 3.1 Gen 2",
.shortname = "C-uB 3.1 Gen 2",
.variant = "C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__microb_device__cmicrob3_pins),
.mandatory_pairs = usb__c_host_sidea__microb_device__cmicrob3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB3_CB_HOST] = {
.name = "C-microB USB 3.1 Gen 2",
.shortname = "C-uB 3.1 Gen 2",
.variant = "C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__microb_device__cmicrob3_pins),
.mandatory_pairs = usb__c_host_sideb__microb_device__cmicrob3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB3_CA_DEVICE] = {
.name = "C-microB USB 3.1 Gen 2",
.shortname = "C-uB 3.1 Gen 2",
.variant = "C device receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sidea__microb_device__cmicrob3_pins),
.mandatory_pairs = usb__c_device_sidea__microb_device__cmicrob3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CUB3_CB_DEVICE] = {
.name = "C-microB USB 3.1 Gen 2",
.shortname = "C-uB 3.1 Gen 2",
.variant = "C device receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_device_sideb__microb_device__cmicrob3_pins),
.mandatory_pairs = usb__c_device_sideb__microb_device__cmicrob3_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C-C
[USB_CABLE_CC2_CA_HOST_CA_DEVICE] = {
.name = "C-C USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - A orientation, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sidea__cc2_pins),
.mandatory_pairs = usb__c_host_sidea__c_device_sidea__cc2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CC2_CA_HOST_CB_DEVICE] = {
.name = "C-C USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - A orientation, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sideb__cc2_pins),
.mandatory_pairs = usb__c_host_sidea__c_device_sideb__cc2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CC2_CB_HOST_CA_DEVICE] = {
.name = "C-C USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - B orientation, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__c_device_sidea__cc2_pins),
.mandatory_pairs = usb__c_host_sideb__c_device_sidea__cc2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CC2_CB_HOST_CB_DEVICE] = {
.name = "C-C USB 2.0",
.shortname = NULL,
.variant = "C device receptacle - B orientation, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__c_device_sideb__cc2_pins),
.mandatory_pairs = usb__c_host_sideb__c_device_sideb__cc2_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
// C-C
[USB_CABLE_CCFF_CA_HOST_CA_DEVICE] = {
.name = "C-C Full-Featured",
.shortname = "C-C Full-Feat.",
.variant = "C device receptacle - A orientation, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sidea__ff_pins),
.mandatory_pairs = usb__c_host_sidea__c_device_sidea__ff_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CCFF_CA_HOST_CB_DEVICE] = {
.name = "C-C Full-Featured",
.shortname = "C-C Full-Feat.",
.variant = "C device receptacle - A orientation, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sideb__ff_pins),
.mandatory_pairs = usb__c_host_sidea__c_device_sideb__ff_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CCFF_CB_HOST_CA_DEVICE] = {
.name = "C-C Full-Featured",
.shortname = "C-C Full-Feat.",
.variant = "C device receptacle - B orientation, C host receptacle - A orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__c_device_sidea__ff_pins),
.mandatory_pairs = usb__c_host_sideb__c_device_sidea__ff_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
[USB_CABLE_CCFF_CB_HOST_CB_DEVICE] = {
.name = "C-C Full-Featured",
.shortname = "C-C Full-Feat.",
.variant = "C device receptacle - B orientation, C host receptacle - B orientation",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.mandatory_pairs_nb = LENGTH(usb__c_host_sideb__c_device_sideb__ff_pins),
.mandatory_pairs = usb__c_host_sideb__c_device_sideb__ff_pins,
.optional_pairs_nb = 0,
.optional_pairs = NULL,
},
};
void usb_cables_pins_float(void)
{
for (uint8_t pin = 0; pin < LENGTH(usb_pins); pin++) { // go through every pin
const struct usb_pin_t* usb_pin = &usb_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_connector_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_connector_float(connectors[connector]);
}
}
const struct usb_connector_t* usb_cables_get_connector(uint8_t pin)
{
if (pin >= LENGTH(usb_pins)) { // verify input parameter
return NULL;
}
for (uint8_t connector_i = 0; connector_i < LENGTH(usb_connectors); connector_i++) { // go though every connector
const struct usb_connector_t* connector = usb_connectors[connector_i]; // get connector
if (NULL == connector) { // verify connector
continue;
}
for (uint8_t pin_i = 0; pin_i < connector->pins_nb; pin_i++) { // check every pin of connector
if (connector->pins[pin_i] == pin) { // the connector pin against provided pin
return connector;
}
}
}
return NULL;
}
bool usb_cables_test_pins(const struct usb_pin_t* pin1, const struct usb_pin_t* pin2, struct usb_connection_t* connection)
{
cm3_assert(pin1);
cm3_assert(pin2);
if (pin1->port == pin2->port && pin1->pin == pin2->pin) { // it's the same pin
if (connection) {
connection->tx_pull_float = true;
connection->tx_drive_float = true;
connection->tx_drive_pull = true;
connection->rx_pull_float = true;
connection->rx_drive_float = true;
connection->rx_drive_pull = true;
}
return true; // all connections will work
}
/** how the connection is tested */
enum connection_test_e {
/** the output side is driven using pull/push, the input is pulled up/down
* @note this will detect direct connections, when nothing is could be powered
* @note there is no false positive, just false negatives when resistors are in line
*/
CONNECTION_TEST_DRIVE_PULL,
/** the output side is driven using pull/push, the input is floating
* @note this can also detect connections with inline resistors, since no pull-up/down will form a voltage divider
* @note prone to noise since one side is floating
*/
CONNECTION_TEST_DRIVE_FLOAT,
/** the output side is driven using pull up/down, the input is floating
* @note this is similar to CONNECTION_TEST_DRIVE_FLOAT method, but meant for ground pins, which should not be driven.
* @note since only a weak pull-up/down resistor is used, inline resistor will lead to voltage divider and possible false negatives
*/
CONNECTION_TEST_PULL_FLOAT,
/** number of connections test */
CONNECTION_TEST_COUNT,
};
// the connection details
struct usb_connection_t _connection = {
.tx_pull_float = false,
.tx_drive_float = false,
.tx_drive_pull = false,
.rx_pull_float = false,
.rx_drive_float = false,
.rx_drive_pull = false,
};
for (enum connection_test_e connection_test = 0; connection_test < CONNECTION_TEST_COUNT; connection_test++) { // test all connection types (from most to least accurate)
for (uint8_t direction = 0; direction < 2; direction++) { // test both directions
const struct usb_pin_t* pin_from = (0 == direction ? pin1 : pin2);
const struct usb_pin_t* pin_to = (0 == direction ? pin2 : pin1);
const uint32_t from_port = pin_from->port;
const uint16_t from_pin = pin_from->pin;
const uint32_t to_port = pin_to->port;
const uint16_t to_pin = pin_to->pin;
// don't drive a ground or shield pin high (shield might be connected to ground)
if ((USB_PIN_TYPE_GROUND == pin_from->type || USB_PIN_TYPE_SHIELD == pin_from->type) && \
(CONNECTION_TEST_DRIVE_PULL == connection_test || CONNECTION_TEST_DRIVE_FLOAT == connection_test)) {
continue;
}
// set pin mode for sending pin
switch (connection_test) {
case CONNECTION_TEST_DRIVE_PULL:
gpio_set_mode(from_port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, from_pin);
break;
case CONNECTION_TEST_DRIVE_FLOAT:
if (0 == direction && _connection.tx_drive_pull) { // skip test to save time since we already found a connection
continue;
} else if (direction && _connection.rx_drive_pull) { // skip test to save time since we already found a connection
continue;
}
gpio_set_mode(from_port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, from_pin);
break;
case CONNECTION_TEST_PULL_FLOAT:
if (0 == direction && (_connection.tx_drive_pull || _connection.tx_drive_float)) { // skip test to save time since we already found a connection
continue;
} else if (direction && (_connection.rx_drive_pull || _connection.rx_drive_float)) { // skip test to save time since we already found a connection
continue;
}
gpio_set_mode(from_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, from_pin);
break;
default:
continue; // unknown test
break;
}
// test pattern
// note: the pattern length, and pauses between toggles are purely found out through testing
// cross talk, noise, and capacitance are a pain to correctly get rid off
// the result is not perfect, but often checking both directions eliminates false positives
bool connected = true;
for (uint8_t pattern = 0; pattern < 4 && connected; pattern++) { // the pattern is just a sequence on high/low
// set alternatively high and low on one pin, and check level on the other pin
gpio_set_mode(to_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, to_pin); // first pull to remove capacitance
if (0 == pattern % 2) { // test if high level is detected
gpio_clear(to_port, to_pin); // pull down
gpio_set(from_port, from_pin); // set high
} else { // test if low level is detected
gpio_set(to_port, to_pin); // pull up
gpio_clear(from_port, from_pin); // set low
}
if (USB_PIN_TYPE_POWER == pin_from->type || USB_PIN_TYPE_POWER == pin_from->type) {
sleep_us(1200); // wait to cancel capacitance (10 nF, as used on VBUS in C plug)
} else {
sleep_us(10); // wait to settle
}
switch (connection_test) { // get to float (capacitance should be canceled)
case CONNECTION_TEST_DRIVE_FLOAT:
case CONNECTION_TEST_PULL_FLOAT:
gpio_set_mode(to_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, to_pin);
break;
default:
break;
}
sleep_us(10); // wait for signal to settle
if ((0 == pattern % 2) && (0 == gpio_get(to_port, to_pin))) { // high level not detected
connected = false;
} else if ((pattern % 2) && gpio_get(to_port, to_pin)) { // low level not detected
connected = false;
}
}
// test connection result
if (0 == direction) {
switch (connection_test) {
case CONNECTION_TEST_PULL_FLOAT:
_connection.tx_pull_float = connected;
break;
case CONNECTION_TEST_DRIVE_FLOAT:
_connection.tx_drive_float = connected;
break;
case CONNECTION_TEST_DRIVE_PULL:
_connection.tx_drive_pull = connected;
break;
default:
break;
}
} else {
switch (connection_test) {
case CONNECTION_TEST_PULL_FLOAT:
_connection.rx_pull_float = connected;
break;
case CONNECTION_TEST_DRIVE_FLOAT:
_connection.rx_drive_float = connected;
break;
case CONNECTION_TEST_DRIVE_PULL:
_connection.rx_drive_pull = connected;
break;
default:
break;
}
}
} // direction
} // connection_test
// 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);
// summarize connection
bool connected = true;
if (USB_PIN_TYPE_GROUND == pin1->type || USB_PIN_TYPE_SHIELD == pin1->type) {
connected &= _connection.tx_pull_float;
} else { // not a ground pin
connected &= _connection.tx_drive_float | _connection.tx_drive_pull;
}
if (USB_PIN_TYPE_GROUND == pin2->type || USB_PIN_TYPE_SHIELD == pin2->type) {
connected &= _connection.rx_pull_float;
} else { // not a ground pin
connected &= _connection.rx_drive_float | _connection.rx_drive_pull;
}
// return connection details
if (connection) {
memcpy(connection, &_connection, sizeof(struct usb_connection_t));
}
return connected;
}
bool usb_cables_test_ground(const struct usb_connector_t** connectors, uint8_t connectors_nb, bool* connected)
{
// verify input arguments
if (NULL == connectors || 0 == connectors_nb) {
return false;
}
// initialize output result
bool connection_found = false;
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);
}
}
}
for (uint8_t connector_from = 0; connector_from < connectors_nb; connector_from++) { // test from every connector
if (connected && connected[connector_from]) { // we already found ground on this connector
continue;
}
for (uint8_t pin_from = 0; pin_from < connectors[connector_from]->pins_nb; pin_from++) { // test from every pin
if (connected && connected[connector_from]) { // we already found ground on this connector
break;
}
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 ground connection to this connector
continue;
}
for (uint8_t pin_to = 0; pin_to < connectors[connector_to]->pins_nb; pin_to++) { // test to every pin
if (connected && connected[connector_to]) { // we already found a ground connection to this connector
break;
}
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 connection
if (connected) {
connected[connector_from] = true;
connected[connector_to] = true;
}
connection_found = true;
}
}
}
}
}
// 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);
}
}
}
return connection_found;
}
bool usb_cables_test_load(const struct usb_connector_t* connector)
{
// verify input arguments
if (NULL == connector) {
return false;
}
usb_cables_pins_float(); // 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_test_cable(const struct usb_cable_t* cable, uint8_t* defined, uint8_t* optional, uint8_t* undefined, bool print)
{
if (NULL == cable) {
return false;
}
uint8_t _defined = 0, _optional = 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 as mandatory
bool pair_defined = false;
for (uint8_t pair = 0; pair < cable->mandatory_pairs_nb; pair++) {
if (cable->mandatory_pairs[pair][0] == cable->connectors[connector_from]->pins[pin_from] && cable->mandatory_pairs[pair][1] == cable->connectors[connector_to]->pins[pin_to]) {
pair_defined = true;
}
if (cable->mandatory_pairs[pair][1] == cable->connectors[connector_from]->pins[pin_from] && cable->mandatory_pairs[pair][0] == cable->connectors[connector_to]->pins[pin_to]) {
pair_defined = true;
}
}
// figure out if this connection pair is defined as optional
bool pair_optional = false;
if (!pair_defined) {
for (uint8_t pair = 0; pair < cable->optional_pairs_nb; pair++) {
if (cable->optional_pairs[pair][0] == cable->connectors[connector_from]->pins[pin_from] && cable->optional_pairs[pair][1] == cable->connectors[connector_to]->pins[pin_to]) {
pair_optional = true;
}
if (cable->optional_pairs[pair][1] == cable->connectors[connector_from]->pins[pin_from] && cable->optional_pairs[pair][0] == cable->connectors[connector_to]->pins[pin_to]) {
pair_optional = true;
}
}
}
const bool connection = usb_cables_test_pins(usb_pin_from, usb_pin_to, NULL);
if (connection) {
if (pair_defined) {
_defined++;
} else if (pair_optional) {
_optional++;
} 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 mandatory_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 (optional) {
*optional = _optional;
}
if (undefined) {
*undefined = _undefined;
}
return (0 == _undefined && cable->mandatory_pairs_nb == _defined);
}
uint8_t** usb_cables_test_connections(const struct usb_connector_t** connectors, uint8_t connectors_nb, bool include_intra, bool ground_only, uint16_t* connections_nb)
{
*connections_nb = 0; // number of connections between the connectors we found
uint8_t (*connections)[2] = NULL; // connections between the connectors we found (pairs of pin index)
if (NULL == connectors || 0 == connectors_nb) { // verify input arguments
return NULL;
}
usb_cables_pins_float(); // ensure we start in a safe state so no pin influences the connections check
for (uint8_t connector_from_i = 0; connector_from_i < connectors_nb; connector_from_i++) { // test from every connector
const struct usb_connector_t* connector_from = connectors[connector_from_i]; // get connector
if (NULL == connector_from) { // check connector
continue;
}
for (uint8_t pin_from_i = 0; pin_from_i < connector_from->pins_nb; pin_from_i++) { // test from every pin
const uint8_t pin_from = connector_from->pins[pin_from_i]; // get pin
if (pin_from >= LENGTH(usb_pins)) { // check pin
continue;
}
const struct usb_pin_t* usb_pin_from = &usb_pins[pin_from]; // get from pin
if (ground_only && USB_PIN_TYPE_GROUND != usb_pin_from->type) { // enforce ground only rule
continue;
}
for (uint8_t connector_to_i = connector_from_i; connector_to_i < connectors_nb; connector_to_i++) { // test to every connector (yet untested)
if (!include_intra && connector_to_i == connector_from_i) { // don't check internal connections
continue;
}
const struct usb_connector_t* connector_to = connectors[connector_to_i]; // get connector
if (NULL == connector_to) {
continue;
}
for (uint8_t pin_to_i = 0; pin_to_i < connector_to->pins_nb; pin_to_i++) { // test to every pin
const uint8_t pin_to = connector_to->pins[pin_to_i]; // get pin
const struct usb_pin_t* usb_pin_to = &usb_pins[pin_to]; // get to pin
if (pin_to >= LENGTH(usb_pins)) { // check pin
continue;
}
if (connector_to_i == connector_from_i && pin_to_i <= pin_from_i) { // skip already tested internal connection
continue;
}
if (pin_to == pin_from) { // skip same pin
continue;
}
if (usb_pin_to->port == usb_pin_from->port && usb_pin_to->pin == usb_pin_from->pin) { // skip same pin
continue;
}
// 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;
}
if (ground_only && USB_PIN_TYPE_GROUND != usb_pin_to->type) { // enforce ground only rule
continue;
}
// test connection
const bool connected = usb_cables_test_pins(usb_pin_from, usb_pin_to, NULL);
if (connected) {
if (UINT16_MAX == (*connections_nb)) { // we already found the maximum of connections
return (uint8_t**)connections;
}
(*connections_nb)++; // increment number of connections found
uint8_t (*new_connections)[2] = realloc(connections, *connections_nb * sizeof(uint8_t[2])); // no integer overflow is possible because of the max number of connections
if (NULL == new_connections) { // allocation failed
if (connections) {
free(connections);
}
connections = NULL;
return NULL;
}
connections = new_connections;
connections[(*connections_nb) - 1][0] = pin_from;
connections[(*connections_nb) - 1][1] = pin_to;
}
} // pin_to
} // connector_to
} // pin_from
} // connector_from
return (uint8_t**)connections;
}