Add driver helper std_dev_clear()
This commit is contained in:
parent
9e2e98640a
commit
49f00e13f7
|
@ -136,6 +136,7 @@ SR_PRIV int std_hw_dev_acquisition_stop_serial(struct sr_dev_inst *sdi,
|
||||||
struct sr_serial_dev_inst *serial, const char *prefix);
|
struct sr_serial_dev_inst *serial, const char *prefix);
|
||||||
SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
|
SR_PRIV int std_session_send_df_header(const struct sr_dev_inst *sdi,
|
||||||
const char *prefix);
|
const char *prefix);
|
||||||
|
SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver);
|
||||||
|
|
||||||
/*--- hardware/common/serial.c ----------------------------------------------*/
|
/*--- hardware/common/serial.c ----------------------------------------------*/
|
||||||
|
|
||||||
|
|
53
std.c
53
std.c
|
@ -159,3 +159,56 @@ SR_PRIV int std_hw_dev_acquisition_stop_serial(struct sr_dev_inst *sdi,
|
||||||
|
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Standard driver dev_clear() helper.
|
||||||
|
*
|
||||||
|
* This function can be used to implement the dev_clear() driver API
|
||||||
|
* callback. dev_close() is called before every sr_dev_inst is cleared.
|
||||||
|
*
|
||||||
|
* The only limitation is driver-specific device contexts (sdi->priv).
|
||||||
|
* These are freed, but any dynamic allocation within structs stored
|
||||||
|
* there cannot be freed.
|
||||||
|
*
|
||||||
|
* @param driver The driver which will have its instances released.
|
||||||
|
*
|
||||||
|
* @return SR_OK on success.
|
||||||
|
*/
|
||||||
|
SR_PRIV int std_dev_clear(const struct sr_dev_driver *driver)
|
||||||
|
{
|
||||||
|
struct sr_dev_inst *sdi;
|
||||||
|
struct drv_context *drvc;
|
||||||
|
struct dev_context *devc;
|
||||||
|
GSList *l;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
drvc = driver->priv;
|
||||||
|
ret = SR_OK;
|
||||||
|
for (l = drvc->instances; l; l = l->next) {
|
||||||
|
/* Log errors, but continue cleaning up the rest. */
|
||||||
|
if (!(sdi = l->data)) {
|
||||||
|
ret = SR_ERR_BUG;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!(devc = sdi->priv)) {
|
||||||
|
ret = SR_ERR_BUG;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (driver->dev_close)
|
||||||
|
driver->dev_close(sdi);
|
||||||
|
|
||||||
|
if (sdi->conn) {
|
||||||
|
if (sdi->inst_type == SR_INST_USB)
|
||||||
|
sr_usb_dev_inst_free(sdi->conn);
|
||||||
|
else if (sdi->inst_type == SR_INST_SERIAL)
|
||||||
|
sr_serial_dev_inst_free(sdi->conn);
|
||||||
|
}
|
||||||
|
sdi = l->data;
|
||||||
|
sr_dev_inst_free(sdi);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_slist_free(drvc->instances);
|
||||||
|
drvc->instances = NULL;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue