diff --git a/usb_cables.c b/usb_cables.c index 6ae6125..f5d62ca 100644 --- a/usb_cables.c +++ b/usb_cables.c @@ -4541,6 +4541,26 @@ void usb_cables_connectors_float(const struct usb_connector_t** connectors, uint } } +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; +} + uint8_t usb_cables_check_pins(const struct usb_pin_t* pin1, const struct usb_pin_t* pin2) { cm3_assert(pin1 && pin2); diff --git a/usb_cables.h b/usb_cables.h index 92b2a91..49e76fa 100644 --- a/usb_cables.h +++ b/usb_cables.h @@ -82,6 +82,11 @@ void usb_cables_connector_float(const struct usb_connector_t* connector); * @param[in] connectors_nb numbers of connectors */ void usb_cables_connectors_float(const struct usb_connector_t** connectors, uint8_t connectors_nb); +/** get connector from pin + * @param[in] pin pin index in usb_pins + * @return corresponding connector (NULL if none found) + */ +const struct usb_connector_t* usb_cables_get_connector(uint8_t pin); /** test if two pins are connected * @param[in] pin1 first pin * @param[in] pin2 second pin