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;
} 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);
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;
}
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;
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)
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;
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,};
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);
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);
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]);
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);