X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=session.c;h=0c21c7caa9fa5f5d5e2c3919d272b221b734f220;hb=1a081ca67d63a0bd933a3d715792d85afd437296;hp=9ebaf04f94d91db6b99e2bfa058437413dac8392;hpb=e0508e67998b6b2b5cdd65b4b094b50c07386385;p=libsigrok.git diff --git a/session.c b/session.c index 9ebaf04f..0c21c7ca 100644 --- a/session.c +++ b/session.c @@ -1,7 +1,7 @@ /* * This file is part of the sigrok project. * - * Copyright (C) 2010 Bert Vermeulen + * Copyright (C) 2012 Bert Vermeulen * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,6 @@ * along with this program. If not, see . */ -#include "config.h" #include #include #include @@ -56,7 +55,7 @@ static int source_timeout = -1; * * @return A pointer to the newly allocated session, or NULL upon errors. */ -struct sr_session *sr_session_new(void) +SR_API struct sr_session *sr_session_new(void) { if (!(session = calloc(1, sizeof(struct sr_session)))) { sr_err("session: %s: session malloc failed", __func__); @@ -73,7 +72,7 @@ struct sr_session *sr_session_new(void) * * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_destroy(void) +SR_API int sr_session_destroy(void) { if (!session) { sr_warn("session: %s: session was NULL", __func__); @@ -101,7 +100,7 @@ int sr_session_destroy(void) * * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_device_clear(void) +SR_API int sr_session_device_clear(void) { if (!session) { sr_warn("session: %s: session was NULL", __func__); @@ -123,7 +122,7 @@ int sr_session_device_clear(void) * * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments. */ -int sr_session_device_add(struct sr_device *device) +SR_API int sr_session_device_add(struct sr_device *device) { int ret; @@ -165,7 +164,7 @@ int sr_session_device_add(struct sr_device *device) * * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_datafeed_callback_clear(void) +SR_API int sr_session_datafeed_callback_clear(void) { if (!session) { sr_err("session: %s: session was NULL", __func__); @@ -184,7 +183,7 @@ int sr_session_datafeed_callback_clear(void) * @param callback TODO. * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_datafeed_callback_add(sr_datafeed_callback callback) +SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback callback) { if (!session) { sr_err("session: %s: session was NULL", __func__); @@ -258,7 +257,7 @@ static int sr_session_run_poll(void) * * @return SR_OK upon success, SR_ERR upon errors. */ -int sr_session_start(void) +SR_API int sr_session_start(void) { struct sr_device *device; GSList *l; @@ -304,7 +303,7 @@ int sr_session_start(void) * * @return SR_OK upon success, SR_ERR_BUG upon errors. */ -int sr_session_run(void) +SR_API int sr_session_run(void) { if (!session) { sr_err("session: %s: session was NULL; a session must be " @@ -342,7 +341,7 @@ int sr_session_run(void) * * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_halt(void) +SR_API int sr_session_halt(void) { if (!session) { sr_err("session: %s: session was NULL", __func__); @@ -362,7 +361,7 @@ int sr_session_halt(void) * * @return SR_OK upon success, SR_ERR_BUG if no session exists. */ -int sr_session_stop(void) +SR_API int sr_session_stop(void) { struct sr_device *device; GSList *l; @@ -378,8 +377,12 @@ int sr_session_stop(void) for (l = session->devices; l; l = l->next) { device = l->data; /* Check for device != NULL. */ - if (device->plugin && device->plugin->stop_acquisition) - device->plugin->stop_acquisition(device->plugin_index, device); + if (device->plugin) { + if (device->plugin->stop_acquisition) + device->plugin->stop_acquisition(device->plugin_index, device); + if (device->plugin->cleanup) + device->plugin->cleanup(); + } } return SR_OK; @@ -409,15 +412,12 @@ static int datafeed_dump(struct sr_datafeed_packet *packet) sr_dbg("bus: received SR_DF_HEADER"); break; case SR_DF_TRIGGER: - sr_dbg("bus: received SR_DF_TRIGGER at %lu ms", - packet->timeoffset / 1000000); + sr_dbg("bus: received SR_DF_TRIGGER"); break; case SR_DF_LOGIC: logic = packet->payload; /* TODO: Check for logic != NULL. */ - sr_dbg("bus: received SR_DF_LOGIC at %f ms duration %f ms, " - "%" PRIu64 " bytes", packet->timeoffset / 1000000.0, - packet->duration / 1000000.0, logic->length); + sr_dbg("bus: received SR_DF_LOGIC %" PRIu64 " bytes", logic->length); break; case SR_DF_END: sr_dbg("bus: received SR_DF_END"); @@ -438,7 +438,8 @@ static int datafeed_dump(struct sr_datafeed_packet *packet) * @param packet TODO. * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments. */ -int sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet) +SR_API int sr_session_bus(struct sr_device *device, + struct sr_datafeed_packet *packet) { GSList *l; sr_datafeed_callback cb; @@ -486,8 +487,8 @@ int sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet) * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments, or * SR_ERR_MALLOC upon memory allocation errors. */ -int sr_session_source_add(int fd, int events, int timeout, - sr_receive_data_callback callback, void *user_data) +SR_API int sr_session_source_add(int fd, int events, int timeout, + sr_receive_data_callback callback, void *user_data) { struct source *new_sources, *s; @@ -536,7 +537,7 @@ int sr_session_source_add(int fd, int events, int timeout, * SR_ERR_MALLOC upon memory allocation errors, SR_ERR_BUG upon * internal errors. */ -int sr_session_source_remove(int fd) +SR_API int sr_session_source_remove(int fd) { struct source *new_sources; int old, new;