From ae4d152d51235a95b9a2757524088abde6edfe7d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 30 Dec 2020 12:04:27 +1100 Subject: [PATCH] AP_SerialManager: added find_portnum() API used for allocating device IDs --- libraries/AP_SerialManager/AP_SerialManager.cpp | 10 ++++++++++ libraries/AP_SerialManager/AP_SerialManager.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/libraries/AP_SerialManager/AP_SerialManager.cpp b/libraries/AP_SerialManager/AP_SerialManager.cpp index 01b1fbe11b..aee310d3fe 100644 --- a/libraries/AP_SerialManager/AP_SerialManager.cpp +++ b/libraries/AP_SerialManager/AP_SerialManager.cpp @@ -584,6 +584,16 @@ uint32_t AP_SerialManager::find_baudrate(enum SerialProtocol protocol, uint8_t i return map_baudrate(_state->baud); } +// find_portnum - find port number (SERIALn index) for a protocol and instance, -1 for not found +int8_t AP_SerialManager::find_portnum(enum SerialProtocol protocol, uint8_t instance) const +{ + const struct UARTState *_state = find_protocol_instance(protocol, instance); + if (_state == nullptr) { + return -1; + } + return int8_t(_state - &state[0]); +} + // get_mavlink_channel - provides the mavlink channel associated with a given protocol // instance should be zero if searching for the first instance, 1 for the second, etc // returns true if a channel is found, false if not diff --git a/libraries/AP_SerialManager/AP_SerialManager.h b/libraries/AP_SerialManager/AP_SerialManager.h index d5b3f7cc65..ff2c9c76d2 100644 --- a/libraries/AP_SerialManager/AP_SerialManager.h +++ b/libraries/AP_SerialManager/AP_SerialManager.h @@ -174,6 +174,9 @@ public: // returns the baudrate of that protocol on success, 0 if a serial port cannot be found uint32_t find_baudrate(enum SerialProtocol protocol, uint8_t instance) const; + // find_portnum - find port number (SERIALn index) for a protocol and instance, -1 for not found + int8_t find_portnum(enum SerialProtocol protocol, uint8_t instance) const; + // get_mavlink_channel - provides the mavlink channel associated with a given protocol (and instance) // instance should be zero if searching for the first instance, 1 for the second, etc // returns true if a channel is found, false if not