+ if (!conn)
+ return NULL;
+ if (!serialcomm)
+ serialcomm = "9600/8e1";
+
+ serial = sr_serial_dev_inst_new(conn, serialcomm);
+ if (serial_open(serial, SERIAL_RDWR) != SR_OK)
+ return NULL;
+
+ sdi = g_malloc0(sizeof(struct sr_dev_inst));
+ sdi->status = SR_ST_INACTIVE;
+ sdi->vendor = g_strdup("ZKETECH");
+ sdi->model = g_strdup("EBD-USB");
+ sdi->inst_type = SR_INST_SERIAL;
+ sdi->conn = serial;
+
+ sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "V.VBUS");
+ sr_channel_new(sdi, 1, SR_CHANNEL_ANALOG, TRUE, "I.VBUS");
+ sr_channel_new(sdi, 2, SR_CHANNEL_ANALOG, TRUE, "V.D+");
+ sr_channel_new(sdi, 3, SR_CHANNEL_ANALOG, TRUE, "V.D-");
+
+ devc = g_malloc0(sizeof(struct dev_context));
+ g_mutex_init(&devc->rw_mutex);
+ devc->current_limit = 0;
+ devc->uvc_threshold = 0;
+ devc->running = FALSE;
+ devc->load_activated = FALSE;
+ sr_sw_limits_init(&devc->limits);
+ sdi->priv = devc;
+
+ /* Starting device. */
+ ebd_init(serial, devc);
+ int ret = ebd_read_message(serial, MSG_MAX_LEN, reply);
+ if (ret < 0) {
+ sr_warn("Could not receive message!");
+ ret = SR_ERR;
+ } else if (ret == 0) {
+ sr_warn("No message received!");
+ ret = SR_ERR;
+ }
+ ebd_stop(serial, devc);