+ 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");
+ sr_channel_new(sdi, 1, SR_CHANNEL_ANALOG, TRUE, "I");
+
+ devc = g_malloc0(sizeof(struct dev_context));
+ g_mutex_init(&devc->rw_mutex);
+ devc->current_limit = 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_chars(serial, MSG_LEN, reply);
+ if (ret != MSG_LEN || reply[MSG_FRAME_BEGIN_POS] != MSG_FRAME_BEGIN \
+ || reply[MSG_FRAME_END_POS] != MSG_FRAME_END) {
+ sr_warn("Invalid message received!");
+ ret = SR_ERR;
+ }
+ ebd_stop(serial, devc);