summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
inline | side by side (from parent 1:
90ed86a)
The get_metadata() routine was unfortunately named, and surprisingly did
more than its name suggested. Rename the routine to contain the ols_
prefix. Run communication to the device in protocol.c, but keep sdi and
devc creation in api.c where they are expected during maintenance. This
"unhides" where stuff is happening, and eliminates redundancy between
the models which support meta data to announce their features, and other
"compatibles" which are covered by generic fallback data.
unsigned int i;
const char *conn, *serialcomm;
char buf[4] = { 0, 0, 0, 0 };
unsigned int i;
const char *conn, *serialcomm;
char buf[4] = { 0, 0, 0, 0 };
+ struct dev_context *devc;
conn = serialcomm = NULL;
for (l = options; l; l = l->next) {
conn = serialcomm = NULL;
for (l = options; l; l = l->next) {
buf[0], buf[1], buf[2], buf[3]);
}
buf[0], buf[1], buf[2], buf[3]);
}
- /* Definitely using the OLS protocol, check if it supports
+ /*
+ * Create common data structures (sdi, devc) here in the common
+ * code path. These further get filled in either from metadata
+ * which is gathered from the device, or from open coded generic
+ * fallback data which is kept in the driver source code.
+ */
+ sdi = g_malloc0(sizeof(*sdi));
+ sdi->status = SR_ST_INACTIVE;
+ sdi->inst_type = SR_INST_SERIAL;
+ sdi->conn = serial;
+ sdi->connection_id = g_strdup(serial->port);
+ devc = g_malloc0(sizeof(*devc));
+ sdi->priv = devc;
+ devc->trigger_at_smpl = OLS_NO_TRIGGER;
+
+ /*
+ * Definitely using the OLS protocol, check if it supports
* the metadata command.
*/
send_shortcommand(serial, CMD_METADATA);
* the metadata command.
*/
send_shortcommand(serial, CMD_METADATA);
g_usleep(RESPONSE_DELAY_US);
g_usleep(RESPONSE_DELAY_US);
if (serial_has_receive_data(serial) != 0) {
/* Got metadata. */
if (serial_has_receive_data(serial) != 0) {
/* Got metadata. */
- sdi = get_metadata(serial);
+ (void)ols_get_metadata(sdi);
} else {
/* Not an OLS -- some other board that uses the sump protocol. */
sr_info("Device does not support metadata.");
} else {
/* Not an OLS -- some other board that uses the sump protocol. */
sr_info("Device does not support metadata.");
- sdi = g_malloc0(sizeof(struct sr_dev_inst));
- sdi->status = SR_ST_INACTIVE;
sdi->vendor = g_strdup("Sump");
sdi->model = g_strdup("Logic Analyzer");
sdi->version = g_strdup("v1.0");
for (i = 0; i < ARRAY_SIZE(ols_channel_names); i++)
sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
ols_channel_names[i]);
sdi->vendor = g_strdup("Sump");
sdi->model = g_strdup("Logic Analyzer");
sdi->version = g_strdup("v1.0");
for (i = 0; i < ARRAY_SIZE(ols_channel_names); i++)
sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
ols_channel_names[i]);
- sdi->priv = ols_dev_new();
}
/* Configure samplerate and divider. */
if (ols_set_samplerate(sdi, DEFAULT_SAMPLERATE) != SR_OK)
sr_dbg("Failed to set default samplerate (%" PRIu64 ").",
DEFAULT_SAMPLERATE);
}
/* Configure samplerate and divider. */
if (ols_set_samplerate(sdi, DEFAULT_SAMPLERATE) != SR_OK)
sr_dbg("Failed to set default samplerate (%" PRIu64 ").",
DEFAULT_SAMPLERATE);
- sdi->inst_type = SR_INST_SERIAL;
- sdi->conn = serial;
- sdi->connection_id = g_strdup(serial->port);
-SR_PRIV struct dev_context *ols_dev_new(void)
-{
- struct dev_context *devc;
-
- devc = g_malloc0(sizeof(struct dev_context));
- devc->trigger_at_smpl = OLS_NO_TRIGGER;
-
- return devc;
-}
-
static void ols_channel_new(struct sr_dev_inst *sdi, int num_chan)
{
struct dev_context *devc = sdi->priv;
static void ols_channel_new(struct sr_dev_inst *sdi, int num_chan)
{
struct dev_context *devc = sdi->priv;
devc->device_flags |= DEVICE_FLAG_IS_DEMON_CORE;
}
devc->device_flags |= DEVICE_FLAG_IS_DEMON_CORE;
}
-SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial)
+SR_PRIV int ols_get_metadata(struct sr_dev_inst *sdi)
- struct sr_dev_inst *sdi;
+ struct sr_serial_dev_inst *serial;
struct dev_context *devc;
uint32_t tmp_int;
uint8_t key, type;
struct dev_context *devc;
uint32_t tmp_int;
uint8_t key, type;
GString *tmp_str, *devname, *version;
guchar tmp_c;
GString *tmp_str, *devname, *version;
guchar tmp_c;
- sdi = g_malloc0(sizeof(struct sr_dev_inst));
- sdi->status = SR_ST_INACTIVE;
- devc = ols_dev_new();
- sdi->priv = devc;
+ serial = sdi->conn;
+ devc = sdi->priv;
devname = g_string_new("");
version = g_string_new("");
devname = g_string_new("");
version = g_string_new("");
/* Optionally amend received metadata, model specific quirks. */
ols_metadata_quirks(sdi);
/* Optionally amend received metadata, model specific quirks. */
ols_metadata_quirks(sdi);
}
SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
}
SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
SR_PRIV int ols_send_reset(struct sr_serial_dev_inst *serial);
SR_PRIV int ols_prepare_acquisition(const struct sr_dev_inst *sdi);
SR_PRIV uint32_t ols_channel_mask(const struct sr_dev_inst *sdi);
SR_PRIV int ols_send_reset(struct sr_serial_dev_inst *serial);
SR_PRIV int ols_prepare_acquisition(const struct sr_dev_inst *sdi);
SR_PRIV uint32_t ols_channel_mask(const struct sr_dev_inst *sdi);
-SR_PRIV struct dev_context *ols_dev_new(void);
-SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial);
+SR_PRIV int ols_get_metadata(struct sr_dev_inst *sdi);
SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
uint64_t samplerate);
SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi);
SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi,
uint64_t samplerate);
SR_PRIV void abort_acquisition(const struct sr_dev_inst *sdi);