Fix for mtp operation 19/143519/1 accepted/tizen/4.0/unified/20170828.223333 accepted/tizen/unified/20170816.160350 submit/tizen/20170816.074736 submit/tizen_4.0/20170828.100003
authorjh8801.jung <jh8801.jung@samsung.com>
Thu, 10 Aug 2017 07:45:58 +0000 (16:45 +0900)
committerjh8801.jung <jh8801.jung@samsung.com>
Thu, 10 Aug 2017 07:48:04 +0000 (16:48 +0900)
Signed-off-by: jh8801.jung <jh8801.jung@samsung.com>
Change-Id: Ie16e72b7d88ba912a600d9ac93680f26518ae5a2

packaging/mtp-initiator.spec
src/daemon/include/mtp_daemon.h
src/daemon/mtp_daemon_event.c
src/daemon/mtp_daemon_gdbus_objectinfo.c

index f45a172..302c5dd 100755 (executable)
@@ -1,7 +1,7 @@
 Name:       mtp-initiator
 Summary:    mtp(media transfer protocol) initiator
-Version:    1.4.22
-Release:    1
+Version:    1.4.23
+Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index 2020e59..6d9d5ae 100755 (executable)
@@ -126,6 +126,7 @@ struct _mtp_device_info {
        LIBMTP_mtpdevice_t *device;
        int bus_location;
        int device_number;
+       int port_number;
        char *model_name;
        char *stitching_engine_version;
 };
index da909ea..c20788c 100755 (executable)
@@ -37,7 +37,7 @@ typedef enum {
        USB_MAX,
 } usbhost_state;
 
-typedef void (*device_changed_cb)(const char *dev_path, int bus_no, int dev_no,
+typedef void (*device_changed_cb)(const char *dev_path, int bus_no, int port_no,
        usbhost_state host_status, void *user_data);
 
 typedef struct _device_cb_data device_cb_data;
@@ -92,11 +92,11 @@ static void __wait_smack_labeling(char *usb_node)
        } while (check_count++ < 100);
 }
 
-static bool __parsing_usb_devpath(const char *devpath, int *busno, int *devno)
+static bool __parsing_usb_devpath(const char *devpath, int *busno, int *portno)
 {
        int devpath_len = 0;
        char bus[4] = {0,};
-       char dev[4] = {0,};
+       char port[4] = {0,};
 
        devpath_len = strlen(devpath);
 
@@ -104,10 +104,10 @@ static bool __parsing_usb_devpath(const char *devpath, int *busno, int *devno)
                return false;
 
        strncpy(bus, &devpath[devpath_len - 7], 3);
-       strncpy(dev, &devpath[devpath_len - 3], 3);
+       strncpy(port, &devpath[devpath_len - 3], 3);
 
        *busno = atoi(bus);
-       *devno = atoi(dev);
+       *portno = atoi(port);
 
        return true;
 }
@@ -123,8 +123,9 @@ static void __dbus_usb_host_event_cb(GDBusConnection* connection,
        GVariant *tmp;
        const char *devpath = NULL;
        int state = -1;
+       int device_class = 0;
        int busno = 0;
-       int devno = 0;
+       int portno = 0;
        gsize size = 0;
        device_cb_data *cb_data = (device_cb_data *)user_data;
        void *usr_cb = cb_data->usr_cb;
@@ -136,18 +137,26 @@ static void __dbus_usb_host_event_cb(GDBusConnection* connection,
        tmp = g_variant_get_child_value(parameters, 1);
        devpath = g_variant_get_string(tmp, &size);
 
+       tmp = g_variant_get_child_value(parameters, 2);
+       device_class = g_variant_get_int32(tmp);
+
        if (devpath == NULL) {
                MTP_LOGE("devpath is NULL");
                return;
        }
 
-       if (__parsing_usb_devpath(devpath, &busno, &devno) == false) {
+       if (device_class != 0x06) {
+               MTP_LOGE("The usb class is not mtp class : %d", device_class);
+               return;
+       }
+
+       if (__parsing_usb_devpath(devpath, &busno, &portno) == false) {
                MTP_LOGE("devpath parsing failed: %s", devpath);
                return;
        }
 
-       if (busno > 0 && devno > 0)
-               ((device_changed_cb)usr_cb)(devpath, busno, devno, state, usr_data);
+       if (busno > 0 && portno > 0)
+               ((device_changed_cb)usr_cb)(devpath, busno, portno, state, usr_data);
 }
 
 static int __dbus_subscribe_usb_host_event(device_changed_cb usr_callback, void *usr_data)
@@ -203,7 +212,7 @@ ERROR:
        return ret;
 }
 
-void __usb_host_status_changed_cb(const char *dev_path, int bus_no, int dev_no, usbhost_state host_status, void *user_data)
+void __usb_host_status_changed_cb(const char *dev_path, int bus_no, int port_no, usbhost_state host_status, void *user_data)
 {
        int slot;
        int num_of_devices;
@@ -212,12 +221,13 @@ void __usb_host_status_changed_cb(const char *dev_path, int bus_no, int dev_no,
        LIBMTP_mtpdevice_t *device;
        mtp_device_info *device_info;
 
-       MTP_LOGI("usb status: %d, %03d-%03d", host_status, bus_no, dev_no);
+       MTP_LOGI("usb status: %d, bus_no : %03d, port_no : %03d", host_status, bus_no, port_no);
 
        if (host_status == USB_HOST_ADDED) {
+               usleep(200000);
                LIBMTP_Detect_Raw_Devices(&raw_devices, &num_of_devices);
                for (slot = 0; slot < num_of_devices; slot++) {
-                       if (bus_no == raw_devices[slot].bus_location && dev_no == raw_devices[slot].devnum) {
+                       if (bus_no == raw_devices[slot].bus_location && port_no == raw_devices[slot].portnum) {
                                int empty_slot = 0;
                                char usb_node[256] = {0,};
 
@@ -237,6 +247,7 @@ void __usb_host_status_changed_cb(const char *dev_path, int bus_no, int dev_no,
                                device_info->device = device;
                                device_info->bus_location = raw_devices[slot].bus_location;
                                device_info->device_number = raw_devices[slot].devnum;
+                               device_info->port_number = raw_devices[slot].portnum;
                                device_info->model_name = LIBMTP_Get_Modelname(device);
 
                                empty_slot = __search_empty_slot(mtp_ctx);
@@ -271,7 +282,7 @@ void __usb_host_status_changed_cb(const char *dev_path, int bus_no, int dev_no,
                for (slot = 1; slot < MTP_MAX_SLOT; slot++) {
                        device_info = mtp_ctx->device_list->device_info_list[slot];
                        if (device_info && bus_no == device_info->bus_location &&
-                               dev_no == device_info->device_number) {
+                               port_no == device_info->port_number) {
                                int device_id = -1;
 
                                device_id = mtp_daemon_util_get_device_id(device_info->device, mtp_ctx);
@@ -387,7 +398,7 @@ mtp_error_e __device_list_init(mtp_context *mtp_ctx)
 
                snprintf(usb_node, sizeof(usb_node), "/dev/bus/usb/%03d/%03d",
                        rawdevices[device_index].bus_location, rawdevices[device_index].devnum);
-               
+
                __wait_smack_labeling(usb_node);
 
                device = LIBMTP_Open_Raw_Device_Uncached(&rawdevices[device_index]);
@@ -401,6 +412,7 @@ mtp_error_e __device_list_init(mtp_context *mtp_ctx)
                device_info->device = device;
                device_info->bus_location = rawdevices[device_index].bus_location;
                device_info->device_number = rawdevices[device_index].devnum;
+               device_info->port_number = rawdevices[device_index].portnum;
                device_info->model_name = LIBMTP_Get_Modelname(device);
                char *device_version = LIBMTP_Get_Deviceversion(device);
 
index b4c3d31..dc945a3 100755 (executable)
@@ -159,7 +159,7 @@ static void __objectinfo_get_property_string_thread_func(gpointer user_data)
                                property_value = NULL;
                                break;
                        }
-                       MTP_LOGI("property_value is %d", property_value);
+                       MTP_LOGI("property_value is %s", property_value);
                } else {
                        property_value = NULL;
                        MTP_LOGE("object_info is NULL");