#include "libsigrok.h"
#include "libsigrok-internal.h"
-/* Message logging helpers with subsystem-specific prefix string. */
-#define LOG_PREFIX "session: "
-#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args)
-#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args)
-#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args)
-#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args)
-#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args)
-#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args)
+/** @cond PRIVATE */
+#define LOG_PREFIX "session"
+/** @endcond */
/**
* @file
struct source {
int timeout;
- sr_receive_data_callback_t cb;
+ sr_receive_data_callback cb;
void *cb_data;
/* This is used to keep track of the object (fd, pollfd or channel) which is
};
struct datafeed_callback {
- sr_datafeed_callback_t cb;
+ sr_datafeed_callback cb;
void *cb_data;
};
* The same question applies to all the other session functions.
*
* @retval NULL Error.
- * @retval other A pointer to the newly allocated session->
+ * @retval other A pointer to the newly allocated session.
*/
SR_API struct sr_session *sr_session_new(void)
{
session->devs = g_slist_append(session->devs, (gpointer)sdi);
if (session->running) {
- /* Adding a device to a running session. Start acquisition
- * on that device now. */
+ /* Adding a device to a running session. Commit settings
+ * and start acquisition on that device now. */
+ if ((ret = sr_config_commit(sdi)) != SR_OK) {
+ sr_err("Failed to commit device settings before "
+ "starting acquisition in running session (%s)",
+ sr_strerror(ret));
+ return ret;
+ }
if ((ret = sdi->driver->dev_acquisition_start(sdi,
- (void *)sdi)) != SR_OK)
+ (void *)sdi)) != SR_OK) {
sr_err("Failed to start acquisition of device in "
- "running session: %d", ret);
+ "running session (%s)", sr_strerror(ret));
+ return ret;
+ }
}
return SR_OK;
* @retval SR_OK Success.
* @retval SR_ERR_BUG No session exists.
*/
-SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback_t cb, void *cb_data)
+SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback cb, void *cb_data)
{
struct datafeed_callback *cb_struct;
ret = SR_OK;
for (l = session->devs; l; l = l->next) {
sdi = l->data;
+ if ((ret = sr_config_commit(sdi)) != SR_OK) {
+ sr_err("Failed to commit device settings before "
+ "starting acquisition (%s)", sr_strerror(ret));
+ break;
+ }
if ((ret = sdi->driver->dev_acquisition_start(sdi, sdi)) != SR_OK) {
sr_err("%s: could not start an acquisition "
"(%s)", __func__, sr_strerror(ret));
break;
case SR_DF_LOGIC:
logic = packet->payload;
- sr_dbg("bus: Received SR_DF_LOGIC packet (%" PRIu64 " bytes).",
- logic->length);
+ sr_dbg("bus: Received SR_DF_LOGIC packet (%" PRIu64 " bytes, "
+ "unitsize = %d).", logic->length, logic->unitsize);
break;
case SR_DF_ANALOG:
analog = packet->payload;
* @retval SR_ERR_MALLOC Memory allocation error.
*/
static int _sr_session_source_add(GPollFD *pollfd, int timeout,
- sr_receive_data_callback_t cb, void *cb_data, gintptr poll_object)
+ sr_receive_data_callback cb, void *cb_data, gintptr poll_object)
{
struct source *new_sources, *s;
GPollFD *new_pollfds;
* @retval SR_ERR_MALLOC Memory allocation error.
*/
SR_API int sr_session_source_add(int fd, int events, int timeout,
- sr_receive_data_callback_t cb, void *cb_data)
+ sr_receive_data_callback cb, void *cb_data)
{
GPollFD p;
* @retval SR_ERR_MALLOC Memory allocation error.
*/
SR_API int sr_session_source_add_pollfd(GPollFD *pollfd, int timeout,
- sr_receive_data_callback_t cb, void *cb_data)
+ sr_receive_data_callback cb, void *cb_data)
{
return _sr_session_source_add(pollfd, timeout, cb,
cb_data, (gintptr)pollfd);
* @retval SR_ERR_MALLOC Memory allocation error.
*/
SR_API int sr_session_source_add_channel(GIOChannel *channel, int events,
- int timeout, sr_receive_data_callback_t cb, void *cb_data)
+ int timeout, sr_receive_data_callback cb, void *cb_data)
{
GPollFD p;