summaryrefslogtreecommitdiff
path: root/libnm-core
diff options
context:
space:
mode:
Diffstat (limited to 'libnm-core')
-rw-r--r--libnm-core/nm-setting-serial.c50
-rw-r--r--libnm-core/nm-setting-serial.h26
-rw-r--r--libnm-core/tests/test-general.c35
3 files changed, 97 insertions, 14 deletions
diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c
index 7ee2eb710b..f2651a1821 100644
--- a/libnm-core/nm-setting-serial.c
+++ b/libnm-core/nm-setting-serial.c
@@ -127,7 +127,7 @@ nm_setting_serial_get_bits (NMSettingSerial *setting)
*
* Returns: the #NMSettingSerial:parity property of the setting
**/
-char
+NMSettingSerialParity
nm_setting_serial_get_parity (NMSettingSerial *setting)
{
g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0);
@@ -174,6 +174,37 @@ nm_setting_serial_init (NMSettingSerial *setting)
{
}
+static GVariant *
+parity_to_dbus (const GValue *from)
+{
+ switch (g_value_get_enum (from)) {
+ case NM_SETTING_SERIAL_PARITY_EVEN:
+ return g_variant_new_byte ('E');
+ case NM_SETTING_SERIAL_PARITY_ODD:
+ return g_variant_new_byte ('o');
+ case NM_SETTING_SERIAL_PARITY_NONE:
+ default:
+ return g_variant_new_byte ('n');
+ }
+}
+
+static void
+parity_from_dbus (GVariant *from, GValue *to)
+{
+ switch (g_variant_get_byte (from)) {
+ case 'E':
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_EVEN);
+ break;
+ case 'o':
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_ODD);
+ break;
+ case 'n':
+ default:
+ g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_NONE);
+ break;
+ }
+}
+
static void
set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
@@ -188,7 +219,7 @@ set_property (GObject *object, guint prop_id,
priv->bits = g_value_get_uint (value);
break;
case PROP_PARITY:
- priv->parity = g_value_get_schar (value);
+ priv->parity = g_value_get_enum (value);
break;
case PROP_STOPBITS:
priv->stopbits = g_value_get_uint (value);
@@ -216,7 +247,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_uint (value, nm_setting_serial_get_bits (setting));
break;
case PROP_PARITY:
- g_value_set_schar (value, nm_setting_serial_get_parity (setting));
+ g_value_set_enum (value, nm_setting_serial_get_parity (setting));
break;
case PROP_STOPBITS:
g_value_set_uint (value, nm_setting_serial_get_stopbits (setting));
@@ -276,16 +307,21 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class)
/**
* NMSettingSerial:parity:
*
- * Parity setting of the serial port. Either 'E' for even parity, 'o' for
- * odd parity, or 'n' for no parity.
+ * Parity setting of the serial port.
**/
g_object_class_install_property
(object_class, PROP_PARITY,
- g_param_spec_char (NM_SETTING_SERIAL_PARITY, "", "",
- 'E', 'o', 'n',
+ g_param_spec_enum (NM_SETTING_SERIAL_PARITY, "", "",
+ NM_TYPE_SETTING_SERIAL_PARITY,
+ NM_SETTING_SERIAL_PARITY_NONE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+ _nm_setting_class_transform_property (parent_class,
+ NM_SETTING_SERIAL_PARITY,
+ G_VARIANT_TYPE_BYTE,
+ parity_to_dbus,
+ parity_from_dbus);
/**
* NMSettingSerial:stopbits:
diff --git a/libnm-core/nm-setting-serial.h b/libnm-core/nm-setting-serial.h
index b1274a86cb..80600ff80f 100644
--- a/libnm-core/nm-setting-serial.h
+++ b/libnm-core/nm-setting-serial.h
@@ -59,6 +59,20 @@ typedef enum {
#define NM_SETTING_SERIAL_ERROR nm_setting_serial_error_quark ()
GQuark nm_setting_serial_error_quark (void);
+/**
+ * NMSettingSerialParity:
+ * @NM_SETTING_SERIAL_PARITY_NONE: No parity bits (default)
+ * @NM_SETTING_SERIAL_PARITY_EVEN: Even parity
+ * @NM_SETTING_SERIAL_PARITY_ODD: Odd parity
+ *
+ * The parity setting of a serial port.
+ */
+typedef enum {
+ NM_SETTING_SERIAL_PARITY_NONE = 0,
+ NM_SETTING_SERIAL_PARITY_EVEN,
+ NM_SETTING_SERIAL_PARITY_ODD
+} NMSettingSerialParity;
+
#define NM_SETTING_SERIAL_BAUD "baud"
#define NM_SETTING_SERIAL_BITS "bits"
#define NM_SETTING_SERIAL_PARITY "parity"
@@ -78,12 +92,12 @@ typedef struct {
GType nm_setting_serial_get_type (void);
-NMSetting *nm_setting_serial_new (void);
-guint nm_setting_serial_get_baud (NMSettingSerial *setting);
-guint nm_setting_serial_get_bits (NMSettingSerial *setting);
-char nm_setting_serial_get_parity (NMSettingSerial *setting);
-guint nm_setting_serial_get_stopbits (NMSettingSerial *setting);
-guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting);
+NMSetting *nm_setting_serial_new (void);
+guint nm_setting_serial_get_baud (NMSettingSerial *setting);
+guint nm_setting_serial_get_bits (NMSettingSerial *setting);
+NMSettingSerialParity nm_setting_serial_get_parity (NMSettingSerial *setting);
+guint nm_setting_serial_get_stopbits (NMSettingSerial *setting);
+guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting);
G_END_DECLS
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index efd3686d0f..2cb6137866 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -710,7 +710,7 @@ test_setting_to_dbus_transform (void)
static void
test_setting_to_dbus_enum (void)
{
- NMSetting *s_ip6, *s_wsec;
+ NMSetting *s_ip6, *s_wsec, *s_serial;
GVariant *dict, *val;
/* enum */
@@ -754,6 +754,23 @@ test_setting_to_dbus_enum (void)
g_variant_unref (dict);
g_object_unref (s_wsec);
+
+ /* another transformed enum */
+ s_serial = nm_setting_serial_new ();
+ g_object_set (s_serial,
+ NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_ODD,
+ NULL);
+
+ dict = _nm_setting_to_dbus (s_serial, NULL, NM_CONNECTION_SERIALIZE_ALL);
+ g_assert (dict != NULL);
+
+ val = g_variant_lookup_value (dict, NM_SETTING_SERIAL_PARITY, G_VARIANT_TYPE_BYTE);
+ g_assert (val != NULL);
+ g_assert_cmpint (g_variant_get_byte (val), ==, 'o');
+ g_variant_unref (val);
+
+ g_variant_unref (dict);
+ g_object_unref (s_serial);
}
static void
@@ -887,6 +904,7 @@ test_setting_new_from_dbus_enum (void)
{
NMSettingIP6Config *s_ip6;
NMSettingWirelessSecurity *s_wsec;
+ NMSettingSerial *s_serial;
GVariant *dict;
GVariantBuilder builder;
GError *error = NULL;
@@ -926,6 +944,21 @@ test_setting_new_from_dbus_enum (void)
g_variant_unref (dict);
g_object_unref (s_wsec);
+
+ /* another transformed enum */
+ g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING);
+ g_variant_builder_add (&builder, "{sv}",
+ NM_SETTING_SERIAL_PARITY,
+ g_variant_new_byte ('E'));
+ dict = g_variant_builder_end (&builder);
+
+ s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, &error);
+ g_assert_no_error (error);
+
+ g_assert_cmpint (nm_setting_serial_get_parity (s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN);
+
+ g_variant_unref (dict);
+ g_object_unref (s_serial);
}
static NMConnection *