mirror of
https://github.com/DreamSourceLab/DSView.git
synced 2025-01-23 13:42:55 +08:00
update: Auto scan connected hardware device first time
This commit is contained in:
parent
195e20fd05
commit
94a8e924f4
@ -417,7 +417,7 @@ SR_PRIV int sr_listen_hotplug(struct sr_context *ctx, hotplug_event_callback cal
|
||||
ret = libusb_hotplug_register_callback(ctx->libusb_ctx,
|
||||
(libusb_hotplug_event)(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT),
|
||||
(libusb_hotplug_flag)LIBUSB_HOTPLUG_ENUMERATE,
|
||||
0x2A0E,
|
||||
DS_VENDOR_ID,
|
||||
LIBUSB_HOTPLUG_MATCH_ANY,
|
||||
LIBUSB_HOTPLUG_MATCH_ANY,
|
||||
(libusb_hotplug_callback_fn)sr_hotplug_callback,
|
||||
|
@ -190,10 +190,13 @@ static GSList *scan(GSList *options)
|
||||
struct sr_usb_dev_inst *usb_dev_info;
|
||||
uint8_t bus;
|
||||
uint8_t address;
|
||||
int isProduct;
|
||||
int num;
|
||||
|
||||
drvc = di->priv;
|
||||
num = 0;
|
||||
|
||||
if (options != NULL)
|
||||
if (options != NULL)
|
||||
sr_info("%s", "Scan DSCope device with options.");
|
||||
else
|
||||
sr_info("%s", "Scan DSCope device.");
|
||||
@ -242,11 +245,16 @@ static GSList *scan(GSList *options)
|
||||
continue;
|
||||
}
|
||||
|
||||
usb_speed = libusb_get_device_speed(device_handle);
|
||||
if ((usb_speed != LIBUSB_SPEED_HIGH) &&
|
||||
(usb_speed != LIBUSB_SPEED_SUPER))
|
||||
// The vendor id is not right.
|
||||
if (des.idVendor != DS_VENDOR_ID)
|
||||
continue;
|
||||
|
||||
usb_speed = libusb_get_device_speed(device_handle);
|
||||
if ((usb_speed != LIBUSB_SPEED_HIGH) && (usb_speed != LIBUSB_SPEED_SUPER)){
|
||||
sr_info("scan(): The idVendor is right, but the usb speed is too low, speed type:%d", usb_speed);
|
||||
continue;
|
||||
}
|
||||
|
||||
prof = NULL;
|
||||
for (j = 0; supported_DSCope[j].vid; j++) {
|
||||
if (des.idVendor == supported_DSCope[j].vid &&
|
||||
@ -258,8 +266,28 @@ static GSList *scan(GSList *options)
|
||||
}
|
||||
|
||||
/* Skip if the device was not found. */
|
||||
if (!prof)
|
||||
continue;
|
||||
if (prof == NULL){
|
||||
isProduct = 0;
|
||||
|
||||
//Mybe is a dslogic device.
|
||||
for (j = 0; supported_DSLogic[j].vid; j++)
|
||||
{
|
||||
if (des.idVendor == supported_DSLogic[j].vid &&
|
||||
des.idProduct == supported_DSLogic[j].pid &&
|
||||
usb_speed == supported_DSLogic[j].usb_speed) {
|
||||
isProduct = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isProduct == 0){
|
||||
sr_info("scan(): The profile is not matched, idVendor:%02X, idProduct:%02X",
|
||||
des.idVendor,
|
||||
des.idProduct);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sr_usb_device_is_exists(device_handle)){
|
||||
sr_detail("Device is exists, handle: %p", device_handle);
|
||||
@ -294,6 +322,7 @@ static GSList *scan(GSList *options)
|
||||
return NULL;
|
||||
}
|
||||
devices = g_slist_append(devices, sdi);
|
||||
num++;
|
||||
|
||||
if (dsl_check_conf_profile(device_handle)) {
|
||||
/* Already has the firmware, so fix the new address. */
|
||||
@ -337,6 +366,8 @@ static GSList *scan(GSList *options)
|
||||
g_slist_free_full(conn_devices, (GDestroyNotify)sr_usb_dev_inst_free);
|
||||
}
|
||||
|
||||
sr_info("Fond new DSCope device count: %d", num);
|
||||
|
||||
return devices;
|
||||
}
|
||||
|
||||
|
@ -444,7 +444,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
/*
|
||||
* DSLogic
|
||||
*/
|
||||
{0x2A0E, 0x0001, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic", NULL,
|
||||
{DS_VENDOR_ID, 0x0001, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic", NULL,
|
||||
"DSLogic.fw",
|
||||
"DSLogic33.bin",
|
||||
"DSLogic50.bin",
|
||||
@ -473,7 +473,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_MHZ(400)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0003, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic Pro", NULL,
|
||||
{DS_VENDOR_ID, 0x0003, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic Pro", NULL,
|
||||
"DSLogicPro.fw",
|
||||
"DSLogicPro.bin",
|
||||
"DSLogicPro.bin",
|
||||
@ -500,7 +500,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_MHZ(400)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0020, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic PLus", NULL,
|
||||
{DS_VENDOR_ID, 0x0020, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic PLus", NULL,
|
||||
"DSLogicPlus.fw",
|
||||
"DSLogicPlus.bin",
|
||||
"DSLogicPlus.bin",
|
||||
@ -527,7 +527,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_MHZ(400)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0021, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic Basic", NULL,
|
||||
{DS_VENDOR_ID, 0x0021, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic Basic", NULL,
|
||||
"DSLogicBasic.fw",
|
||||
"DSLogicBasic.bin",
|
||||
"DSLogicBasic.bin",
|
||||
@ -554,7 +554,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_MHZ(400)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0029, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U2Basic", NULL,
|
||||
{DS_VENDOR_ID, 0x0029, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U2Basic", NULL,
|
||||
"DSLogicU2Basic.fw",
|
||||
"DSLogicU2Basic.bin",
|
||||
"DSLogicU2Basic.bin",
|
||||
@ -581,7 +581,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_MHZ(400)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002A, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U3Pro16", NULL,
|
||||
{DS_VENDOR_ID, 0x002A, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U3Pro16", NULL,
|
||||
"DSLogicU3Pro16.fw",
|
||||
"DSLogicU3Pro16.bin",
|
||||
"DSLogicU3Pro16.bin",
|
||||
@ -608,7 +608,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_GHZ(1)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002A, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSLogic U3Pro16", NULL,
|
||||
{DS_VENDOR_ID, 0x002A, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSLogic U3Pro16", NULL,
|
||||
"DSLogicU3Pro16.fw",
|
||||
"DSLogicU3Pro16.bin",
|
||||
"DSLogicU3Pro16.bin",
|
||||
@ -635,7 +635,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_GHZ(1)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002C, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U3Pro32", NULL,
|
||||
{DS_VENDOR_ID, 0x002C, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSLogic U3Pro32", NULL,
|
||||
"DSLogicU3Pro32.fw",
|
||||
"DSLogicU3Pro32.bin",
|
||||
"DSLogicU3Pro32.bin",
|
||||
@ -662,7 +662,7 @@ static const struct DSL_profile supported_DSLogic[] = {
|
||||
SR_GHZ(1)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002C, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSLogic U3Pro32", NULL,
|
||||
{DS_VENDOR_ID, 0x002C, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSLogic U3Pro32", NULL,
|
||||
"DSLogicU3Pro32.fw",
|
||||
"DSLogicU3Pro32.bin",
|
||||
"DSLogicU3Pro32.bin",
|
||||
@ -696,7 +696,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
/*
|
||||
* DSCope
|
||||
*/
|
||||
{0x2A0E, 0x0002, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope", NULL,
|
||||
{DS_VENDOR_ID, 0x0002, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope", NULL,
|
||||
"DSCope.fw",
|
||||
"DSCope.bin",
|
||||
"DSCope.bin",
|
||||
@ -723,7 +723,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0004, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope20", NULL,
|
||||
{DS_VENDOR_ID, 0x0004, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope20", NULL,
|
||||
"DSCope20.fw",
|
||||
"DSCope20.bin",
|
||||
"DSCope20.bin",
|
||||
@ -750,7 +750,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0022, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope B20", NULL,
|
||||
{DS_VENDOR_ID, 0x0022, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope B20", NULL,
|
||||
"DSCopeB20.fw",
|
||||
"DSCope20.bin",
|
||||
"DSCope20.bin",
|
||||
@ -777,7 +777,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0023, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20", NULL,
|
||||
{DS_VENDOR_ID, 0x0023, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20", NULL,
|
||||
"DSCopeC20.fw",
|
||||
"DSCopeC20P.bin",
|
||||
"DSCopeC20P.bin",
|
||||
@ -805,7 +805,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
},
|
||||
|
||||
|
||||
{0x2A0E, 0x0024, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20P", NULL,
|
||||
{DS_VENDOR_ID, 0x0024, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20P", NULL,
|
||||
"DSCopeC20P.fw",
|
||||
"DSCopeC20P.bin",
|
||||
"DSCopeC20P.bin",
|
||||
@ -832,7 +832,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0025, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20", NULL,
|
||||
{DS_VENDOR_ID, 0x0025, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope C20", NULL,
|
||||
"DSCopeC20B.fw",
|
||||
"DSCopeC20B.bin",
|
||||
"DSCopeC20B.bin",
|
||||
@ -859,7 +859,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0026, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2B20", NULL,
|
||||
{DS_VENDOR_ID, 0x0026, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2B20", NULL,
|
||||
"DSCopeU2B20.fw",
|
||||
"DSCopeU2B20.bin",
|
||||
"DSCopeU2B20.bin",
|
||||
@ -886,7 +886,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0027, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2P20", NULL,
|
||||
{DS_VENDOR_ID, 0x0027, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2P20", NULL,
|
||||
"DSCopeU2P20.fw",
|
||||
"DSCopeU2P20.bin",
|
||||
"DSCopeU2P20.bin",
|
||||
@ -913,7 +913,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x0028, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2B100", NULL,
|
||||
{DS_VENDOR_ID, 0x0028, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U2B100", NULL,
|
||||
"DSCopeU2B100.fw",
|
||||
"DSCopeU2B100.bin",
|
||||
"DSCopeU2B100.bin",
|
||||
@ -940,7 +940,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002B, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U3P100", NULL,
|
||||
{DS_VENDOR_ID, 0x002B, LIBUSB_SPEED_HIGH, "DreamSourceLab", "DSCope U3P100", NULL,
|
||||
"DSCopeU3P100.fw",
|
||||
"DSCopeU3P100.bin",
|
||||
"DSCopeU3P100.bin",
|
||||
@ -967,7 +967,7 @@ static const struct DSL_profile supported_DSCope[] = {
|
||||
SR_HZ(0)}
|
||||
},
|
||||
|
||||
{0x2A0E, 0x002B, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSCope U3P100", NULL,
|
||||
{DS_VENDOR_ID, 0x002B, LIBUSB_SPEED_SUPER, "DreamSourceLab", "DSCope U3P100", NULL,
|
||||
"DSCopeU3P100.fw",
|
||||
"DSCopeU3P100.bin",
|
||||
"DSCopeU3P100.bin",
|
||||
|
@ -292,8 +292,11 @@ static GSList *scan(GSList *options)
|
||||
struct sr_usb_dev_inst *usb_dev_info;
|
||||
uint8_t bus;
|
||||
uint8_t address;
|
||||
int isProduct;
|
||||
int num;
|
||||
|
||||
drvc = di->priv;
|
||||
num = 0;
|
||||
|
||||
if (options != NULL)
|
||||
sr_info("%s", "Scan DSLogic device with options.");
|
||||
@ -343,9 +346,14 @@ static GSList *scan(GSList *options)
|
||||
libusb_error_name(ret));
|
||||
continue;
|
||||
}
|
||||
|
||||
// The vendor id is not right.
|
||||
if (des.idVendor != DS_VENDOR_ID)
|
||||
continue;
|
||||
|
||||
usb_speed = libusb_get_device_speed(device_handle);
|
||||
if ((usb_speed != LIBUSB_SPEED_HIGH) && (usb_speed != LIBUSB_SPEED_SUPER)){
|
||||
sr_info("scan(): The idVendor is right, but the usb speed is too low, speed type:%d", usb_speed);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -361,8 +369,28 @@ static GSList *scan(GSList *options)
|
||||
}
|
||||
|
||||
/* Skip if the device was not found. */
|
||||
if (!prof)
|
||||
continue;
|
||||
if (prof == NULL){
|
||||
isProduct = 0;
|
||||
|
||||
//Mybe is a dscope device.
|
||||
for (j = 0; supported_DSCope[j].vid; j++)
|
||||
{
|
||||
if (des.idVendor == supported_DSCope[j].vid &&
|
||||
des.idProduct == supported_DSCope[j].pid &&
|
||||
usb_speed == supported_DSCope[j].usb_speed) {
|
||||
isProduct = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isProduct == 0){
|
||||
sr_info("scan(): The profile is not matched, idVendor:%02X, idProduct:%02X",
|
||||
des.idVendor,
|
||||
des.idProduct);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sr_usb_device_is_exists(device_handle)){
|
||||
sr_detail("Device is exists, handle: %p", device_handle);
|
||||
@ -395,6 +423,7 @@ static GSList *scan(GSList *options)
|
||||
return NULL;
|
||||
}
|
||||
devices = g_slist_append(devices, sdi);
|
||||
num++;
|
||||
|
||||
if (dsl_check_conf_profile(device_handle)) {
|
||||
/* Already has the firmware, so fix the new address. */
|
||||
@ -439,6 +468,8 @@ static GSList *scan(GSList *options)
|
||||
g_slist_free_full(conn_devices, (GDestroyNotify)sr_usb_dev_inst_free);
|
||||
}
|
||||
|
||||
sr_info("Fond new DSLogic device count: %d", num);
|
||||
|
||||
return devices;
|
||||
}
|
||||
|
||||
|
@ -396,7 +396,7 @@ SR_PRIV int ds_scan_all_device_list(libusb_context *usb_ctx,struct libusb_device
|
||||
continue;
|
||||
}
|
||||
|
||||
if (des.idVendor == 0x2A0E){
|
||||
if (des.idVendor == DS_VENDOR_ID){
|
||||
if (wr >= size){
|
||||
sr_err("%s", "ds_scan_all_device_list(), buffer length is too short.");
|
||||
assert(0);
|
||||
|
@ -72,6 +72,7 @@ static void collect_run_proc();
|
||||
static void post_event_async(int event);
|
||||
static void send_event(int event);
|
||||
static void make_demo_device_to_list();
|
||||
static void process_attach_event(int isEvent);
|
||||
static struct libusb_device* get_new_attached_usb_device();
|
||||
static struct libusb_device* get_new_detached_usb_device();
|
||||
|
||||
@ -153,6 +154,10 @@ SR_API int ds_lib_init()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Scan the all hardware device.
|
||||
sr_info("%s", "Scan all connected hardware device.");
|
||||
process_attach_event(0);
|
||||
|
||||
sr_listen_hotplug(lib_ctx.sr_ctx, hotplug_event_listen_callback);
|
||||
|
||||
/** Start usb hotplug thread */
|
||||
@ -1151,7 +1156,7 @@ static int update_device_handle(struct libusb_device *old_dev, struct libusb_dev
|
||||
static void hotplug_event_listen_callback(struct libusb_context *ctx, struct libusb_device *dev, int event)
|
||||
{
|
||||
int bDone = 0;
|
||||
|
||||
|
||||
if (dev == NULL){
|
||||
if (event == USB_EV_HOTPLUG_ATTACH)
|
||||
dev = get_new_attached_usb_device();
|
||||
@ -1160,7 +1165,7 @@ static void hotplug_event_listen_callback(struct libusb_context *ctx, struct lib
|
||||
}
|
||||
|
||||
if (dev == NULL){
|
||||
sr_err("%s", "hotplug_event_listen_callback(), @dev is null.");
|
||||
sr_err("%s", "hotplug_event_listen_callback(), no devices to process");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1233,7 +1238,7 @@ static void hotplug_event_listen_callback(struct libusb_context *ctx, struct lib
|
||||
}
|
||||
}
|
||||
|
||||
static void process_attach_event()
|
||||
static void process_attach_event(int isEvent)
|
||||
{
|
||||
struct sr_dev_driver **drivers;
|
||||
GList *dev_list;
|
||||
@ -1241,12 +1246,8 @@ static void process_attach_event()
|
||||
struct sr_dev_driver *dr;
|
||||
int num = 0;
|
||||
|
||||
sr_info("%s", "Process device attach event.");
|
||||
|
||||
if (lib_ctx.attach_device_handle == NULL)
|
||||
{
|
||||
sr_err("%s", "The attached device handle is null.");
|
||||
return;
|
||||
if (isEvent){
|
||||
sr_info("%s", "Process device attach event.");
|
||||
}
|
||||
|
||||
drivers = sr_driver_list();
|
||||
@ -1278,9 +1279,7 @@ static void process_attach_event()
|
||||
}
|
||||
|
||||
// Tell user one new device attched, and the list is updated.
|
||||
|
||||
if (num > 0)
|
||||
{
|
||||
if (num > 0 && isEvent){
|
||||
post_event_async(DS_EV_NEW_DEVICE_ATTACH);
|
||||
}
|
||||
|
||||
@ -1346,13 +1345,12 @@ static void usb_hotplug_process_proc()
|
||||
{
|
||||
sr_hotplug_wait_timout(lib_ctx.sr_ctx);
|
||||
|
||||
if (lib_ctx.attach_event_flag)
|
||||
{
|
||||
process_attach_event();
|
||||
if (lib_ctx.attach_event_flag){
|
||||
process_attach_event(1);
|
||||
lib_ctx.attach_event_flag = 0;
|
||||
}
|
||||
if (lib_ctx.detach_event_flag)
|
||||
{
|
||||
|
||||
if (lib_ctx.detach_event_flag){
|
||||
process_detach_event();
|
||||
lib_ctx.detach_event_flag = 0;
|
||||
}
|
||||
|
@ -54,6 +54,8 @@
|
||||
#define g_safe_free(p) if((p)) g_free((p)); ((p)) = NULL;
|
||||
#define g_safe_free_list(p) if((p)) g_slist_free((p)); ((p)) = NULL;
|
||||
|
||||
#define DS_VENDOR_ID 0x2A0E
|
||||
|
||||
/** global variable */
|
||||
extern char DS_RES_PATH[500];
|
||||
extern struct ds_trigger *trigger;
|
||||
|
Loading…
x
Reference in New Issue
Block a user