diff options
Diffstat (limited to 'libnm-core')
-rw-r--r-- | libnm-core/nm-setting-serial.c | 50 | ||||
-rw-r--r-- | libnm-core/nm-setting-serial.h | 26 | ||||
-rw-r--r-- | libnm-core/tests/test-general.c | 35 |
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 * |