summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2015-05-29 19:42:31 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2015-05-29 19:58:51 +0900
commita22dc810a43bf1bdb0eac0e911870ad955a84c8f (patch)
treeb31634c08b40b0f3e6e587f62a54a0f044061ad9
parent9729fa21943507b33e8c71d1bd7bd0abe7a0c01f (diff)
downloaddeviced-a22dc810a43bf1bdb0eac0e911870ad955a84c8f.tar.gz
deviced-a22dc810a43bf1bdb0eac0e911870ad955a84c8f.tar.bz2
deviced-a22dc810a43bf1bdb0eac0e911870ad955a84c8f.zip
block: Add device changed signal
/Org/Tizen/System/DeviceD/Block/Devices/[devnode] Interfaces org.tizen.system.deviced.Block methods Mount ("s" mount point) Unmount ("i" unmount option) /* 0 : Normal, 1 : Force */ signals DeviceChanged ("issssssisii" block type, /* 0 : scsi, 1 : mmc */ devnode, syspath, fs_usgae, fs_type, fs_version, fs_uuid_enc, readonly, /* 0 : rw, 1 : ro */ mount_point, state, /* 0 : unmount, 1 : mount */ primary) /* 0 : false, 1 : true */ Change-Id: I6ea8d7abd9d806a9b1e64e13fc011df3a710493f Signed-off-by: Jiyoung Yun <jy910.yun@samsung.com>
-rw-r--r--src/block/block.c59
1 files changed, 58 insertions, 1 deletions
diff --git a/src/block/block.c b/src/block/block.c
index 596b3590..3f932b7a 100644
--- a/src/block/block.c
+++ b/src/block/block.c
@@ -57,6 +57,7 @@
#define BLOCK_OBJECT_ADDED "ObjectAdded"
#define BLOCK_OBJECT_REMOVED "ObjectRemoved"
+#define BLOCK_DEVICE_CHANGED "DeviceChanged"
enum block_dev_operation {
BLOCK_DEV_MOUNT,
@@ -158,6 +159,50 @@ static void broadcast_block_info(enum block_dev_operation op,
}
}
+static void signal_device_changed(struct block_device *bdev)
+{
+ struct block_data *data;
+ char *arr[11];
+ char str_block_type[32];
+ char str_readonly[32];
+ char str_state[32];
+ char str_primary[32];
+ char *str_null = "";
+ const char *object_path;
+
+ if (!bdev || !bdev->data)
+ return;
+
+ data = bdev->data;
+
+ /* Broadcast outside with Block iface */
+ snprintf(str_block_type, sizeof(str_block_type),
+ "%d", data->block_type);
+ arr[0] = str_block_type;
+ arr[1] = (data->devnode ? data->devnode : str_null);
+ arr[2] = (data->syspath ? data->syspath : str_null);
+ arr[3] = (data->fs_usage ? data->fs_usage : str_null);
+ arr[4] = (data->fs_type ? data->fs_type : str_null);
+ arr[5] = (data->fs_version ? data->fs_version : str_null);
+ arr[6] = (data->fs_uuid_enc ? data->fs_uuid_enc : str_null);
+ snprintf(str_readonly, sizeof(str_readonly),
+ "%d", data->readonly);
+ arr[7] = str_readonly;
+ arr[8] = (data->mount_point ? data->mount_point : str_null);
+ snprintf(str_state, sizeof(str_state),
+ "%d", data->state);
+ arr[9] = str_state;
+ snprintf(str_primary, sizeof(str_primary),
+ "%d", data->primary);
+ arr[10] = str_primary;
+
+ object_path = e_dbus_object_path_get(bdev->object);
+ broadcast_edbus_signal(object_path,
+ DEVICED_INTERFACE_BLOCK,
+ BLOCK_DEVICE_CHANGED,
+ "issssssisib", arr);
+}
+
static bool check_primary_partition(const char *devnode)
{
char str[PATH_MAX];
@@ -560,6 +605,9 @@ out:
/* Broadcast to mmc and usb storage module */
broadcast_block_info(BLOCK_DEV_MOUNT, data, r);
+ /* Broadcast outside with Block iface */
+ signal_device_changed(bdev);
+
return NULL;
}
@@ -731,6 +779,9 @@ out:
/* Broadcast to mmc and usb storage module */
broadcast_block_info(BLOCK_DEV_UNMOUNT, data, r);
+ /* Broadcast outside with Block iface */
+ signal_device_changed(bdev);
+
return r;
}
@@ -1293,10 +1344,16 @@ static int init_block_object_iface(void)
device_methods[i].reply_signature,
device_methods[i].func);
if (r < 0)
- _E("fail to register %s to iface",
+ _E("fail to register %s method to iface",
device_methods[i].member);
}
+ r = e_dbus_interface_signal_add(iface,
+ BLOCK_DEVICE_CHANGED, "issssssisib");
+ if (r < 0)
+ _E("fail to register %s signal to iface",
+ BLOCK_DEVICE_CHANGED);
+
return 0;
}