Add sp_get_port_handle() function.
This commit is contained in:
parent
1c5aae9dc5
commit
3c126654b3
|
@ -285,6 +285,30 @@ enum sp_return sp_get_port_by_name(const char *portname, struct sp_port **port_p
|
|||
*/
|
||||
char *sp_get_port_name(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. Obviously this comes
|
||||
* at a cost in portability, however 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.
|
||||
*
|
||||
* @return SP_OK upon success, a negative error code otherwise.
|
||||
*/
|
||||
enum sp_return sp_get_port_handle(const struct sp_port *port, void *result);
|
||||
|
||||
/**
|
||||
* Free a port structure obtained from sp_get_port_by_name() or sp_copy_port().
|
||||
*/
|
||||
|
|
18
serialport.c
18
serialport.c
|
@ -203,6 +203,24 @@ char *sp_get_port_name(const struct sp_port *port)
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue