serial: allow creating serial ports with a given file descriptor
To enable better unit testing of MMSerialPort and subclasses behavior.
This commit is contained in:
@@ -43,6 +43,7 @@ enum {
|
|||||||
PROP_PARITY,
|
PROP_PARITY,
|
||||||
PROP_STOPBITS,
|
PROP_STOPBITS,
|
||||||
PROP_SEND_DELAY,
|
PROP_SEND_DELAY,
|
||||||
|
PROP_FD,
|
||||||
|
|
||||||
LAST_PROP
|
LAST_PROP
|
||||||
};
|
};
|
||||||
@@ -706,10 +707,13 @@ mm_serial_port_open (MMSerialPort *self, GError **error)
|
|||||||
} else
|
} else
|
||||||
g_message ("(%s) opening serial port...", device);
|
g_message ("(%s) opening serial port...", device);
|
||||||
|
|
||||||
|
/* Only open a new file descriptor if we weren't given one already */
|
||||||
|
if (priv->fd < 0) {
|
||||||
devfile = g_strdup_printf ("/dev/%s", device);
|
devfile = g_strdup_printf ("/dev/%s", device);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
priv->fd = open (devfile, O_RDWR | O_EXCL | O_NONBLOCK | O_NOCTTY);
|
priv->fd = open (devfile, O_RDWR | O_EXCL | O_NONBLOCK | O_NOCTTY);
|
||||||
g_free (devfile);
|
g_free (devfile);
|
||||||
|
}
|
||||||
|
|
||||||
if (priv->fd < 0) {
|
if (priv->fd < 0) {
|
||||||
/* nozomi isn't ready yet when the port appears, and it'll return
|
/* nozomi isn't ready yet when the port appears, and it'll return
|
||||||
@@ -1222,6 +1226,9 @@ set_property (GObject *object, guint prop_id,
|
|||||||
MMSerialPortPrivate *priv = MM_SERIAL_PORT_GET_PRIVATE (object);
|
MMSerialPortPrivate *priv = MM_SERIAL_PORT_GET_PRIVATE (object);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
|
case PROP_FD:
|
||||||
|
priv->fd = g_value_get_int (value);
|
||||||
|
break;
|
||||||
case PROP_BAUD:
|
case PROP_BAUD:
|
||||||
priv->baud = g_value_get_uint (value);
|
priv->baud = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
@@ -1250,6 +1257,9 @@ get_property (GObject *object, guint prop_id,
|
|||||||
MMSerialPortPrivate *priv = MM_SERIAL_PORT_GET_PRIVATE (object);
|
MMSerialPortPrivate *priv = MM_SERIAL_PORT_GET_PRIVATE (object);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
|
case PROP_FD:
|
||||||
|
g_value_set_int (value, priv->fd);
|
||||||
|
break;
|
||||||
case PROP_BAUD:
|
case PROP_BAUD:
|
||||||
g_value_set_uint (value, priv->baud);
|
g_value_set_uint (value, priv->baud);
|
||||||
break;
|
break;
|
||||||
@@ -1312,6 +1322,14 @@ mm_serial_port_class_init (MMSerialPortClass *klass)
|
|||||||
klass->handle_response = real_handle_response;
|
klass->handle_response = real_handle_response;
|
||||||
|
|
||||||
/* Properties */
|
/* Properties */
|
||||||
|
g_object_class_install_property
|
||||||
|
(object_class, PROP_FD,
|
||||||
|
g_param_spec_int (MM_SERIAL_PORT_FD,
|
||||||
|
"File descriptor",
|
||||||
|
"Fiel descriptor",
|
||||||
|
-1, G_MAXINT, -1,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
||||||
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(object_class, PROP_BAUD,
|
(object_class, PROP_BAUD,
|
||||||
g_param_spec_uint (MM_SERIAL_PORT_BAUD,
|
g_param_spec_uint (MM_SERIAL_PORT_BAUD,
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#define MM_SERIAL_PORT_PARITY "parity"
|
#define MM_SERIAL_PORT_PARITY "parity"
|
||||||
#define MM_SERIAL_PORT_STOPBITS "stopbits"
|
#define MM_SERIAL_PORT_STOPBITS "stopbits"
|
||||||
#define MM_SERIAL_PORT_SEND_DELAY "send-delay"
|
#define MM_SERIAL_PORT_SEND_DELAY "send-delay"
|
||||||
|
#define MM_SERIAL_PORT_FD "fd" /* Construct-only */
|
||||||
|
|
||||||
typedef struct _MMSerialPort MMSerialPort;
|
typedef struct _MMSerialPort MMSerialPort;
|
||||||
typedef struct _MMSerialPortClass MMSerialPortClass;
|
typedef struct _MMSerialPortClass MMSerialPortClass;
|
||||||
|
Reference in New Issue
Block a user