]> sigrok.org Git - libserialport.git/blobdiff - serialport.c
Add sp_get_port_handle() function.
[libserialport.git] / serialport.c
index 4b25eafa08af70f70f5c280303d72d2d06c67a84..739a6ed6f9afe06189631cc4e93bf59e7e9e1284 100644 (file)
 
 #include "libserialport.h"
 
+struct sp_port {
+       char *name;
+#ifdef _WIN32
+       HANDLE hdl;
+#else
+       int fd;
+#endif
+};
+
 struct port_data {
 #ifdef _WIN32
        DCB dcb;
@@ -184,6 +193,34 @@ enum sp_return sp_get_port_by_name(const char *portname, struct sp_port **port_p
        RETURN_OK();
 }
 
+char *sp_get_port_name(const struct sp_port *port)
+{
+       TRACE("%p", port);
+
+       if (!port)
+               return NULL;
+
+       RETURN_VALUE("%s", port->name);
+}
+
+enum sp_return sp_get_port_handle(const struct sp_port *port, void *result_ptr)
+{
+       TRACE("%p", port);
+
+       if (!port)
+               RETURN_ERROR(SP_ERR_ARG, "Null port");
+
+#ifdef _WIN32
+       HANDLE *handle_ptr = result_ptr;
+       *handle_ptr = port->hdl;
+#else
+       int *fd_ptr = result_ptr;
+       *fd_ptr = port->fd;
+#endif
+
+       RETURN_OK();
+}
+
 enum sp_return sp_copy_port(const struct sp_port *port, struct sp_port **copy_ptr)
 {
        TRACE("%p, %p", port, copy_ptr);
@@ -1415,6 +1452,22 @@ static enum sp_return set_config(struct sp_port *port, struct port_data *data,
        RETURN_OK();
 }
 
+enum sp_return sp_get_config(struct sp_port *port, struct sp_port_config *config)
+{
+       struct port_data data;
+
+       TRACE("%p, %p", port, config);
+
+       CHECK_OPEN_PORT();
+
+       if (!config)
+               RETURN_ERROR(SP_ERR_ARG, "Null result pointer");
+
+       TRY(get_config(port, &data, config));
+
+       RETURN_OK();
+}
+
 enum sp_return sp_set_config(struct sp_port *port, const struct sp_port_config *config)
 {
        struct port_data data;
@@ -1516,9 +1569,9 @@ enum sp_return sp_get_signals(struct sp_port *port, enum sp_signal *signals)
                *signals |= SP_SIG_CTS;
        if (bits & MS_DSR_ON)
                *signals |= SP_SIG_DSR;
-       if (bits & MS_RING_ON)
-               *signals |= SP_SIG_DCD;
        if (bits & MS_RLSD_ON)
+               *signals |= SP_SIG_DCD;
+       if (bits & MS_RING_ON)
                *signals |= SP_SIG_RI;
 #else
        int bits;