+/**
+ * Get the name of a port.
+ *
+ * The name returned is whatever is normally used to refer to a port on the
+ * current operating system; e.g. for Windows it will usually be a "COMn"
+ * device name, and for Unix it will be a device path beginning with "/dev/".
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port name, or NULL if an invalid port is passed. The name
+ * string is part of the port structure and may not be used after
+ * the port structure has been freed.
+ *
+ * @since 0.1.0
+ */
+char *sp_get_port_name(const struct sp_port *port);
+
+/**
+ * Get a description for a port, to present to end user.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port description, or NULL if an invalid port is passed.
+ * The description string is part of the port structure and may not
+ * be used after the port structure has been freed.
+ *
+ * @since 0.1.1
+ */
+char *sp_get_port_description(const struct sp_port *port);
+
+/**
+ * Get the transport type used by a port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port transport type.
+ *
+ * @since 0.1.1
+ */
+enum sp_transport sp_get_port_transport(const struct sp_port *port);
+
+/**
+ * Get the USB bus number and address on bus of a USB serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ * @param[out] usb_bus Pointer to a variable to store the USB bus. Must not be NULL.
+ * @param[out] usb_address Pointer to a variable to store the USB address. Must not be NULL.
+ *
+ * @return SP_OK upon success, a negative error code otherwise.
+ *
+ * @since 0.1.1
+ */
+enum sp_return sp_get_port_usb_bus_address(const struct sp_port *port,
+ int *usb_bus, int *usb_address);
+
+/**
+ * Get the USB Vendor ID and Product ID of a USB serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ * @param[out] usb_vid Pointer to a variable to store the USB VID. Must not be NULL.
+ * @param[out] usb_pid Pointer to a variable to store the USB PID. Must not be NULL.
+ *
+ * @return SP_OK upon success, a negative error code otherwise.
+ *
+ * @since 0.1.1
+ */
+enum sp_return sp_get_port_usb_vid_pid(const struct sp_port *port, int *usb_vid, int *usb_pid);
+
+/**
+ * Get the USB manufacturer string of a USB serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port manufacturer string, or NULL if an invalid port is passed.
+ * The manufacturer string is part of the port structure and may not
+ * be used after the port structure has been freed.
+ *
+ * @since 0.1.1
+ */
+char *sp_get_port_usb_manufacturer(const struct sp_port *port);
+
+/**
+ * Get the USB product string of a USB serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port product string, or NULL if an invalid port is passed.
+ * The product string is part of the port structure and may not be
+ * used after the port structure has been freed.
+ *
+ * @since 0.1.1
+ */
+char *sp_get_port_usb_product(const struct sp_port *port);
+
+/**
+ * Get the USB serial number string of a USB serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port serial number, or NULL if an invalid port is passed.
+ * The serial number string is part of the port structure and may
+ * not be used after the port structure has been freed.
+ *
+ * @since 0.1.1
+ */
+char *sp_get_port_usb_serial(const struct sp_port *port);
+
+/**
+ * Get the MAC address of a Bluetooth serial adapter port.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ *
+ * @return The port MAC address, or NULL if an invalid port is passed.
+ * The MAC address string is part of the port structure and may not
+ * be used after the port structure has been freed.
+ *
+ * @since 0.1.1
+ */
+char *sp_get_port_bluetooth_address(const struct sp_port *port);
+
+/**
+ * Get the operating system handle for a port.
+ *
+ * The type of the handle depends on the operating system. On Unix based
+ * systems, the handle is a file descriptor of type "int". On Windows, the
+ * handle is of type "HANDLE". The user should allocate a variable of the
+ * appropriate type and pass a pointer to this to receive the result.
+ *
+ * To obtain a valid handle, the port must first be opened by calling
+ * sp_open() using the same port structure.
+ *
+ * After the port is closed or the port structure freed, the handle may
+ * no longer be valid.
+ *
+ * @warning This feature is provided so that programs may make use of
+ * OS-specific functionality where desired. Doing so obviously
+ * comes at a cost in portability. It also cannot be guaranteed
+ * that direct usage of the OS handle will not conflict with the
+ * library's own usage of the port. Be careful.
+ *
+ * @param[in] port Pointer to a port structure. Must not be NULL.
+ * @param[out] result_ptr If any error is returned, the variable pointed to by
+ * result_ptr will be set to NULL. Otherwise, it will
+ * be set to point to the OS handle. Must not be NULL.
+ *
+ * @return SP_OK upon success, a negative error code otherwise.
+ *
+ * @since 0.1.0
+ */
+enum sp_return sp_get_port_handle(const struct sp_port *port, void *result_ptr);
+